Spring中IOC的Annotation(注解)的相关应用方法

本文详细解析了在Spring框架中使用注解与XML配置的区别,并深入探讨了自动装配机制的工作原理。通过对比两种配置方式,阐述了如何在UserService类中使用自动装配注解进行依赖注入,以及为什么引入<context:annotation-config/>后能够实现注解配置的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在spring中使用注解时首先需要对bean.xml进行一些配置,我们可以从spring的官方文档中找到这样的配置说明:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
               
     <context:annotation-config/>
     
</beans>

 其中绿色字体部分是需要在xml中加入的内容。

2.我们在之前不用注解的时候xml类似于这么写

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
  <bean id="u" class="model.User"></bean>

  <bean id="userService" class="service.UserService">
   <!--设值注入  -->
   <property name="userDao" ref="userDaoImpl" /> 
  </bean>

  <bean id="userDaoImpl" class="daoimpl.UserDaoImpl"></bean>

</beans>

需要在UserService中进行配置注入userDao,而如果用注解我们可以省去这一配置而在UserService类中进行注解

//设值注入
 @Autowired
 public void setUserDao(UserDao userDao) {
  this.userDao = userDao;
 }

这里是自动装配的方式进行注解,这样做会告诉容器到xml中找到与UserDao类型相同的bean的配置进行注入,而不虚理会该bean的id是否等于userDao,只要它的class的值

是UserDao或者它的实现类即可。

这里需要注意一点,在UserService类中必须有该类的无参构造器。

3.下面介绍一下为什么写了<context:annotation-config/>之后就能进行注解了呢?

在官方文档中我们可以找到这样一段解释:

(The implicitly registered post-processors include AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, PersistenceAnnotationBeanPostProcessor, as well as the aforementioned RequiredAnnotationBeanPostProcessor.)

As always, these can be registered as individual bean definitions, but they can also be implicitly registered by including the following tag in an XML-based Spring configuration.

这两句话其中下面一句是在上面的前边出现的,这样写时为了好理解,意思是这些类可以作为独立的bean定义被注册,这些类是指前面一句中提到的AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, PersistenceAnnotationBeanPostProcessor, RequiredAnnotationBeanPostProcessor,但是他们也可以在基于xml的spring配置中在幕后呗注册。

而以上这些被注册过的类的作用就是,找到注解的标签然后到xml找到相关的bean的配置进行注入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值