- 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");//获取beanObject 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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--指定加载bean的位置,component--><context:component-scan base-package="com.tj.domain"/></beans>
@Bean可以定义第三方bean
@Configurationpublic class MysqlConfig {@Value("${mysql.username}")private String username;@Value("${mysql.password}")private String password;@Value("${mysql.url}")private String url;@Beanpublic DataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();//dataSource.setDriverClassName(driverClassName);//如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassNamedataSource.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);//上下文容器对象已经初始化完毕后,手工加载beanctx.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 {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"com.tj.domain.BeanTest"};}}
10.ImportBeanDefinitionRegistrar
11.BeanDefinitionRegistryPostProcessor
12.@Conditional()注解控制bean的加载
springboot里可以通过@ConditionalOnxxxxx()来控制
13.@EnableConfigurationProperties
注解设定使用属性类时加载bean
