02.Spring_基于注解的方式配置bean
2018-01-31 23:29
267 查看
1.常用的注解
@Component
标识一个普通组件(常用于class文件)
@Repository
标识一个持久层(数据访问层)组件(常用于dao文件)
@Service
标识一个业务逻辑层组件(常用于service文件)
@Controller
标识一个表现层的组件(常用于handler处理器)
如果某些类需要让IOC容器来管理,处理添加以上标识之外,还需要在Spring的配置文件中设置自动扫描的包
<!-- 配置自动扫描的包 -->
<context:component-scan
base-package="com.atguigu.spring.t"></context:component-scan>
通过注解的方式让IOC容器实例化bean时,在IOC容器中bean的id属性值默认是类的类名的首字母小写,我们也可以通过value属性来指定该id属性值,如:@Repository(value="userDao")或@Repository("userDao"),value属性值可以省略。
此时IOC容器中bean实例的id属性值就是userDao
指定扫描那些类
此时需要设置<context:component-scan>标签中的use-default-filters属性值为false
<!-- 配置自动扫描的包 -->
<!-- base-package:指定一个基础包,Spring会自动扫描该包及其子包中的所有类
-->
<!-- resource-pattern:精确指定扫描那个包下的类 -->
<!-- <context:component-scan base-package="com.atguigu.spring.annotation" resource-pattern="dao/impl/*.class"></context:component-scan>
-->
<context:component-scan
base-package="com.atguigu.spring.annotation"
use-default-filters="false">
<!-- ★指定只扫描那些类:使用context:include-filter子标签 -->
<!--
指定只扫描那些类必须将use-default-filters的属性值设置为false
-->
<!--
type属性的值:
-annotation:expression值是注解的全类名
-assignable:expression值是要扫描的类的全类名或者是其实现的接口的全类名
-->
<!-- <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/> -->
<context:include-filter
type="assignable"
expression="com.atguigu.spring.annotation.dao.UserDao"/>
</context:component-scan>
指定不扫描那些类
<context:component-scan
base-package="com.atguigu.spring.annotation">
<!-- ★指定只扫描那些类:使用context:include-filter子标签 -->
<!-- 指定只扫描那些类必须将use-default-filters的属性值设置为false
-->
<!--
type属性的值:
-annotation:expression值是注解的全类名
-assignable:expression值是要扫描的类的全类名或者是其实现的接口的全类名
-->
<!-- ★指定不扫描那些类:使用context:exclude-filter子标签 -->
<!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> -->
<context:exclude-filter
type="assignable"
expression="com.atguigu.spring.annotation.dao.UserDao"/>
</context:component-scan>
@Autowired
用来自动转配类中的属性,默认是必须要装配成功,如果无法装配成功会抛出异常,我们也可以通过设置required=false来指定某个属性不是必须要装配的
/**
* 自动装配的步骤:
* 1.根据属性的类型自动装配
* 2.以属性名作为id属性值去IOC容器中查找
* 3.可以通过@Qualifier注解来指定要装配IOC容器中的那个bean实例
*/
@Autowired
// @Qualifier(value="userDao2")
@Qualifier("userDao2")
//通过@Qualifier注解中的value属性指定要装配的bean的id属性值,value属性可以省略
private
UserDao
userDao;
//也可以通过以下方式实现自动装配(不常用)
// @Autowired
// public void setUserDao(@Qualifier("userDao1") UserDao userDao) {
// this.userDao = userDao;
// }
@Autowired(required=false)
//通过设置required=false来告诉Spring该属性不是必须要装配的
private
User
user;
2.泛型依赖注入(Spring4.0的新特性)
分别创建BaseDao<T>和BaseService<T>,在BaserService<T>中注入BaseDao<T>
@Service
public
class
BaseService<T> {
@Autowired
protected
BaseDao<T>
baseDao;
public
void
testBaseDao(){
System.out.println(baseDao.getClass());
}
}
分别创建UserDao继承BaseDao<User>;UserService继承BaseService<User>
@Repository
public
class
UserDao
extends
BaseDao<User> {
}
@Service
public
class
UserService
extends
BaseService<User> {
}
测试
从IOC容器中获取UserService实例,然后调用BaseService中的testBaseDao方法,然后发现注入的baseDao是UserDao
@Test
public
void
testT(){
UserService
userService
= (UserService)
ioc.getBean("userService");
userService.testBaseDao();
}
3.整合多个配置文件
1)使用通配符
//整个多个配置文件的方式:
//1)使用通配符*
ApplicationContext
ioc
=
new
ClassPathXmlApplicationContext("beans-*.xml");
2)直接在创建IOC容器时传入多个配置文件
//2)直接传入多个配置文件
ApplicationContext
ioc
=
new
ClassPathXmlApplicationContext("beans-annotation.xml","beans-xml.xml","beans-t.xml");
3)找一个主配置文件,然后将其他的配置文件通过import标签引入进来
//3)选中一个配置文件作为主文件,然后同import标签将其他文件导入进来
ApplicationContext
ioc
=
new
ClassPathXmlApplicationContext("beans-annotation.xml");
导入其他配置文件
<!-- 导入其他配置文件 -->
<import
resource="beans-t.xml"/>
<import
resource="beans-xml.xml"/>
@Component
标识一个普通组件(常用于class文件)
@Repository
标识一个持久层(数据访问层)组件(常用于dao文件)
@Service
标识一个业务逻辑层组件(常用于service文件)
@Controller
标识一个表现层的组件(常用于handler处理器)
如果某些类需要让IOC容器来管理,处理添加以上标识之外,还需要在Spring的配置文件中设置自动扫描的包
<!-- 配置自动扫描的包 -->
<context:component-scan
base-package="com.atguigu.spring.t"></context:component-scan>
通过注解的方式让IOC容器实例化bean时,在IOC容器中bean的id属性值默认是类的类名的首字母小写,我们也可以通过value属性来指定该id属性值,如:@Repository(value="userDao")或@Repository("userDao"),value属性值可以省略。
此时IOC容器中bean实例的id属性值就是userDao
指定扫描那些类
此时需要设置<context:component-scan>标签中的use-default-filters属性值为false
<!-- 配置自动扫描的包 -->
<!-- base-package:指定一个基础包,Spring会自动扫描该包及其子包中的所有类
-->
<!-- resource-pattern:精确指定扫描那个包下的类 -->
<!-- <context:component-scan base-package="com.atguigu.spring.annotation" resource-pattern="dao/impl/*.class"></context:component-scan>
-->
<context:component-scan
base-package="com.atguigu.spring.annotation"
use-default-filters="false">
<!-- ★指定只扫描那些类:使用context:include-filter子标签 -->
<!--
指定只扫描那些类必须将use-default-filters的属性值设置为false
-->
<!--
type属性的值:
-annotation:expression值是注解的全类名
-assignable:expression值是要扫描的类的全类名或者是其实现的接口的全类名
-->
<!-- <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/> -->
<context:include-filter
type="assignable"
expression="com.atguigu.spring.annotation.dao.UserDao"/>
</context:component-scan>
指定不扫描那些类
<context:component-scan
base-package="com.atguigu.spring.annotation">
<!-- ★指定只扫描那些类:使用context:include-filter子标签 -->
<!-- 指定只扫描那些类必须将use-default-filters的属性值设置为false
-->
<!--
type属性的值:
-annotation:expression值是注解的全类名
-assignable:expression值是要扫描的类的全类名或者是其实现的接口的全类名
-->
<!-- ★指定不扫描那些类:使用context:exclude-filter子标签 -->
<!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> -->
<context:exclude-filter
type="assignable"
expression="com.atguigu.spring.annotation.dao.UserDao"/>
</context:component-scan>
@Autowired
用来自动转配类中的属性,默认是必须要装配成功,如果无法装配成功会抛出异常,我们也可以通过设置required=false来指定某个属性不是必须要装配的
/**
* 自动装配的步骤:
* 1.根据属性的类型自动装配
* 2.以属性名作为id属性值去IOC容器中查找
* 3.可以通过@Qualifier注解来指定要装配IOC容器中的那个bean实例
*/
@Autowired
// @Qualifier(value="userDao2")
@Qualifier("userDao2")
//通过@Qualifier注解中的value属性指定要装配的bean的id属性值,value属性可以省略
private
UserDao
userDao;
//也可以通过以下方式实现自动装配(不常用)
// @Autowired
// public void setUserDao(@Qualifier("userDao1") UserDao userDao) {
// this.userDao = userDao;
// }
@Autowired(required=false)
//通过设置required=false来告诉Spring该属性不是必须要装配的
private
User
user;
2.泛型依赖注入(Spring4.0的新特性)
分别创建BaseDao<T>和BaseService<T>,在BaserService<T>中注入BaseDao<T>
@Service
public
class
BaseService<T> {
@Autowired
protected
BaseDao<T>
baseDao;
public
void
testBaseDao(){
System.out.println(baseDao.getClass());
}
}
分别创建UserDao继承BaseDao<User>;UserService继承BaseService<User>
@Repository
public
class
UserDao
extends
BaseDao<User> {
}
@Service
public
class
UserService
extends
BaseService<User> {
}
测试
从IOC容器中获取UserService实例,然后调用BaseService中的testBaseDao方法,然后发现注入的baseDao是UserDao
@Test
public
void
testT(){
UserService
userService
= (UserService)
ioc.getBean("userService");
userService.testBaseDao();
}
3.整合多个配置文件
1)使用通配符
//整个多个配置文件的方式:
//1)使用通配符*
ApplicationContext
ioc
=
new
ClassPathXmlApplicationContext("beans-*.xml");
2)直接在创建IOC容器时传入多个配置文件
//2)直接传入多个配置文件
ApplicationContext
ioc
=
new
ClassPathXmlApplicationContext("beans-annotation.xml","beans-xml.xml","beans-t.xml");
3)找一个主配置文件,然后将其他的配置文件通过import标签引入进来
//3)选中一个配置文件作为主文件,然后同import标签将其他文件导入进来
ApplicationContext
ioc
=
new
ClassPathXmlApplicationContext("beans-annotation.xml");
导入其他配置文件
<!-- 导入其他配置文件 -->
<import
resource="beans-t.xml"/>
<import
resource="beans-xml.xml"/>
相关文章推荐
- Spring基于注解的方式配置bean的实例
- Spring(二)基于注解的方式配置Bean
- [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)
- Spring_基于注解的方式配置bean
- Spring笔记2-基于注解的方式配置Bean
- Spring框架学习(10):基于注解的方式配置Bean
- Spring4深入理解IOC&DI04----Bean配置方式(全类名,工厂方法,FactoryBean),配置形式(基于XML和注解),泛型依赖注入
- Spring中Bean的配置:基于注解的方式
- spring(三)(基于注解的方式配置bean)
- IOC之基于注解的配置bean(下)
- Dubbo基于注解方式的配置
- 基于注解方式的AOP的配置与应用
- Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析
- spring aop的使用(注解方式以及基于xml配置方式)
- 注解的方式来配置bean
- Spring学习(13)--- 基于Java类的配置Bean 之 @Configuration & @Bean注解
- Spring-基于注解的配置[02自动装载bean]
- Spring学习(二十二) Bean配置的三种方式(XML、注解、Java类)介绍与对比
- 04-Spring-使用ioc注解方式配置bean
- spring 注解方式配置Bean