1.JAVA JUint
JUint的机制和自动装配很像,而且代码里面也多次用到JUint的功能。
JUnit是Java单元测试框架,已经在Eclipse中默认安装。
JUnit4通过注解的方式来识别测试方法。目前支持的主要注解有:
- @BeforeClass 全局只会执行一次,而且是第一个运行
- @Before 在测试方法运行之前运行
- @Test 测试方法
- @After 在测试方法运行之后允许
- @AfterClass 全局只会执行一次,而且是最后一个运行
- @Ignore 忽略此方法
JUint的配置方法为右键项目-peoperties-Java Build Path-Libraries-Add Library-JUint
然后右键选择新建 New JUnit Test Case
2.自动装配
- @Component 该类会作为组件类,可以被扫描到
- @Configuration 会告诉spring在该主借的类中加载配置
- @ComponentScan 启用组件扫描,spring会扫描Configuration所在的包以及所有子包下带有@Component注解的类
- @RunWith(SpringJUnit4ClassRunner.class) 在测试的时候自动创建spring上下文
- @Autowired bean注入
@ComponentScan默认会扫描配置类所在的包,但是想要扫描别的包或者多个包的时候可以这样调用
@ComponentScan(basePackageClasses = {config1.class, config2.class})
虽然还有别的调用方法,但是推荐这样也,更安全
3.通过JAVA代码配置
JAVA代码配置其实和自动配置看下去差不多,它使用的是注释@bean。
区别于自动装配,在很多第三方库中没有办法进去编辑源码添加@Component注释使类被扫描到,所以会使用@bean注释。
@bean这个注释会告诉spring此方法会返回一个对象,该对象会在注册成为spring上下文中的bean。
这里相当于半手动的创建spring中的bean,bean的id同方法名,即下面的两个bean的id为compactDisc和cdPlayer
@Configuration
public class CDPlayerConfig {
@Bean
public CompactDisc compactDisc() {
return new SgtPeppers();
}
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc) {
return new CDPlayer(compactDisc);
}
}
spring中的bean默认是单例的,所以spring会拦截多余的同类调用(带有@bean注释的同类方法)
4.高级装配
- @profile 设置bean的环境
- @Conditional 条件化bean
- @Primary 装配时如果发现多个适合的bean 优先装配带有此注解的bean
- @Qualifer 限定
1.@profile
同一个应用程序经常会面对多个开发环境,在不同的开发环境迁移的时候,如何为每种开发环境选择最为合适的配置
带有@profile注解的bean,只有当该注解标明的profile被激活的时候,该bean才会被创建,该注解可以用于类,也可以用于方法。
需要在xml显示的设置激活的profile
2.Conditional
条件化的bean,实现只有当某种情况发生(某环境存在,某个类被创建,某资源存在等等),注解需要指明实现了Conditional接口的类(该类中对各种条件进行判断,返回true或false)
3.@Primary @Qualifer装配中的歧义性
如三个类都实现了Dessert接口且都有@Component接口,那么在扫描注入时这三个类都适合Dessert类型的接口。
@Primary出现歧义时的首选项
@Qualifer限定符 与Autowired协同,指定当前想要注入的是哪个bean
可以创建自定义的限定符而不依靠beanid(实际上相当于自动装配时候的另一种id形式)