3. 注解
3.1 @Component(把当前类对象存入spring容器中)
3.2 @Controller @Service @Repository
3.3 @Autowired + @Qualifier(在spring容器中寻找需要注入的类)
3.4 @Resource(name = "XXX")
3.5 @PreDestroy @PostConstruct @Scope
4. 基于注解的IOC实例
5. 对基于注解的IOC实例进行优化
5.1 @Configuration(指定当前类是一个配置类)
5.2 @ComponentScan(创建容器时要扫描的包)
5.3 @Bean(把当前方法的返回值存入spring容器中)
5.4 @Import(导入其他的配置类)
5.5 @PropertySource(指出properties文件的位置)
5.6 优化
5.7 @value(将外部配置文件的值动态注入到Bean)
5.8 @RunWith(SpringJUnit4ClassRunner.class) + @ContextConfiguration
3. 注解
3.1 @Component(把当前类对象存入spring容器中)
属性:默认值是当前类名,且首字母改小写。
作用:用于把当前类对象存入spring容器中。
但是使用时需要告知spring在创建容器时要扫描的包
<context:component-scan base-package="com.liuming"></context:component-scan>

3.2 @Controller @Service @Repository
@Controller:一般用在表现层
@Service:一般用在业务层
@Repository:一般用在持久层
作用和属性等同于@Component
3.3 @Autowired + @Qualifier(在spring容器中寻找需要注入的类)
@Autowired:自动按照类型注入(容器为map结构,注入时在map结构中寻找相同的类型。但一个接口如果有两个实现类时,只使用@Autowired会报错)
@Qualifier:指明要注入类的id(在给类成员注入时,需要配合@Autowired一起使用,但给方法参数注入时,可以独立使用)

3.4 @Resource(name = "XXX")
@Resource:直接按照bean的id注入,不是spring的注解,而是JDK的注解
3.5 @PreDestroy @PostConstruct @Scope
@PostConstruct在bean创建完成并且属性赋值完成后来执行初始化方法。
@PreDestroy注解在容器销毁bean之前通知进行清理工作。
@Scope用于指定bean的作用范围
4. 基于注解的IOC实例
1. 使用注解将service类存到spring容器中。在容器中寻找需要注入的参数 accountDao

2. 将accountDao存入spring容器中,同样runner使用注解自动注入。

3. 注入数据源。

4. 测试类进行测试。

5. 对基于注解的IOC实例进行优化
5.1 @Configuration
作用:指定当前类是一个配置类
当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以省略。
关于xml与注解的选择:自己写的类建议使用注解,jar包中的类建议使用xml

5.2 @ComponentScan
作用:用于通过注解指定spring在创建容器时要扫描的包
等价于<context:component-scan base-package="com.liuming"></context:component-scan>

5.3 @Bean
作用:用于把当前方法的返回值作为bean对象存入spring的ioc容器中
属性:name 用于指定bean的id,默认值为当前方法的名称
5.4 @Import
作用:用于导入其他的配置类
当我们使用Import的注解之后,有Import注解的类就父配置类,而导入的都是子配置类
5.5 @PropertySource
作用:用于指定properties文件的位置
关键字:classpath,表示类路径下
5.6 优化
1. 新增config.SpringConfiguration类取代bean.xml文件

2. 新增JdbcConfig进一步解耦,这里注意@Qualifier的新用法

@Value
作用:通过注解将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值
5.8 @RunWith(SpringJUnit4ClassRunner.class) + @ContextConfiguration
应用程序的入口:main()
junit单元测试中,没有main()也能执行,这是因为junit集成了一个main(),该方法会判断当前测试类中哪些方法有@Test注解
junit不会管我们是否采用了spring框架,在执行测试方法时候,junit根本不知道我们是不是使用了spring,所以也就不会为我们读取配置文件/配置类创建spring核心容器
由上可知:当测试方法执行时,没有Ioc容器,就算写了Autowired注解,也无法注入
@RunWith:用于指定junit运行环境,是junit提供给其他框架测试环境接口扩展。
为了便于使用spring的依赖注入,spring提供了SpringJUnit4ClassRunner作为Junit测试环境
@ContextConfiguration Spring整合JUnit4测试时,使用注解引入多个配置文件


网友评论