- 1.xml文件方式定义
- 2.通过注解定义,bean名称可以省略
- 3.可以通过@ComponentScan指定bean的扫描位置
- 4.FactoryBean
- 5.@ImportResource加载配置类并加载配置文件(系统迁移)
- 6.@Configuration(proxyBeanMethods = true)
- 7.@Import
- 8.AnnotationConfigApplicationContext.registerBean(“beanName”, BeanTest.class);
- 9.ImportSelector
- 10.ImportBeanDefinitionRegistrar
- 11.BeanDefinitionRegistryPostProcessor
- 12.@Conditional()注解控制bean的加载
- 13.@EnableConfigurationProperties
1.xml文件方式定义
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="beanName" class="com.tj.classpath" />
</beans>
通过ClassPathXmlApplicationContext获取bean
public static void main(String[] args) {
//初始化上下文对象
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取bean
Object beanName = ctx.getBean("beanName");
}
2.通过注解定义,bean名称可以省略
@Component(“beanName”)
@Service(“beanName”)
@Configuration(“beanName”)
@Controller
@Repository
通过xml文件指定bean加载位置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<!--指定加载bean的位置,component-->
<context:component-scan base-package="com.tj.domain"/>
</beans>
@Bean可以定义第三方bean
@Configuration
public class MysqlConfig {
@Value("${mysql.username}")
private String username;
@Value("${mysql.password}")
private String password;
@Value("${mysql.url}")
private String url;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
//dataSource.setDriverClassName(driverClassName);//如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setValidationQuery("SELECT 1");//用来检测连接是否有效
dataSource.setTestOnBorrow(false);//借用连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
dataSource.setTestOnReturn(false);//归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
//连接空闲时检测,如果连接空闲时间大于timeBetweenEvictionRunsMillis指定的毫秒,执行validationQuery指定的SQL来检测连接是否有效
dataSource.setTestWhileIdle(true);//如果检测失败,则连接将被从池中去除
dataSource.setTimeBetweenEvictionRunsMillis(60000);//1分钟
dataSource.setMaxActive(20);
dataSource.setInitialSize(5);
return dataSource;
}
}
3.可以通过@ComponentScan指定bean的扫描位置
这个可以代替在xml中的位置指定
@ComponentScan本身也会变成bean
@ComponentScan({"com.tj.domain","com.tj.config"})
4.FactoryBean
5.@ImportResource加载配置类并加载配置文件(系统迁移)
可以让配置类导入原始的xml的bean配置
@ImportResource("applicationContext.xml")
6.@Configuration(proxyBeanMethods = true)
proxyBeanMethods 默认就是true,可以保障调用此方法得到的对象是从容器中获取的而不是重新new的
7.@Import
使用@Import注解导入要注入的bean对应的字节码,此形式可以有效的降低源代码与spring技术的耦合度,在spring技术底层及诸多框架的整合中大量使用
@Import({BeanTest.class,BeanTest2.class,})
8.AnnotationConfigApplicationContext.registerBean(“beanName”, BeanTest.class);
//初始化上下文对象
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig3.class);
//上下文容器对象已经初始化完毕后,手工加载bean
ctx.registerBean("beanName", BeanTest.class); //指定bean名称的
ctx.register(BeanTest.class);//直接使用类目注册
9.ImportSelector
package com.tj.domain;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.tj.domain.BeanTest"};
}
}
10.ImportBeanDefinitionRegistrar
11.BeanDefinitionRegistryPostProcessor
12.@Conditional()注解控制bean的加载
springboot里可以通过@ConditionalOnxxxxx()来控制
13.@EnableConfigurationProperties
注解设定使用属性类时加载bean