02.Spring_基于注解的方式配置bean

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" />




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring中,我们可以使用注解配置和装配Bean,这可以使我们的代码更加简洁和易于维护。下面是关于如何基于注解配置和装配Bean的一些简要介绍: 1. 基于注解配置Bean 在Spring中,我们可以使用以下注解配置Bean: - @Component:表示该类是一个Spring Bean,需要被Spring容器管理。 - @Service:表示该类是一个服务层的Bean。 - @Controller:表示该类是一个控制层的Bean。 - @Repository:表示该类是一个数据访问层的Bean。 这些注解都是基于@Component注解的衍生注解,它们的作用是更加明确地表示Bean的角色。我们可以在Bean类上添加这些注解,告诉Spring容器该类需要被管理。例如: ``` @Service public class UserService { // ... } ``` 2. 基于注解装配Bean 在Spring中,我们可以使用以下注解来装配Bean: - @Autowired:自动装配Bean。 - @Qualifier:指定具体的Bean名称进行装配。 - @Resource:指定具体的Bean名称进行装配,与@Qualifier类似。 - @Value:注入一个具体的值。 使用@Autowired注解进行自动装配时,Spring会自动在容器中寻找与该类型匹配的Bean,并将其注入到类的属性中。例如: ``` @Service public class UserService { @Autowired private UserDao userDao; // ... } ``` 使用@Qualifier或@Resource注解可以指定具体的Bean名称进行装配。例如: ``` @Service public class UserService { @Autowired @Qualifier("userDaoImpl") private UserDao userDao; // ... } ``` 使用@Value注解可以注入一个具体的值。例如: ``` @Service public class UserService { @Value("10") private int maxCount; // ... } ``` 以上就是关于Spring中基于注解配置和装配Bean的简要介绍,希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值