您的位置:首页 > 编程语言 > Java开发

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"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: