Spring实践第五天(基于注解实现bean的自动装配)

吃可爱长大的小学妹 提交于 2020-02-12 19:50:54

 

说明

如图,项目目录:

 

注解的方式:

1.目标用注解的方式来代替bean标签的配置(autowired = ''default'')

2.方式

  • 先在主配置文件,告知要开启注解模式:<context:annotation-config/>
  • 在相关的类的方法上加注解

     

     

     

 

 

 

一、在xml文件中加入<context:annotation-config/>标签

1.如果要使用注解,首先要在xml文件中配置注解模式(使项目允许使用注解):

 在applicationContext加入<context:annotation-config/>标签

<?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-3.0.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启注解模式-->
    <context:annotation-config/>

    <!-- 配置我们要管理的bean -->
    <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl"/>

    <bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/>

</beans>

 

 

 

二、在UserServiceImpl中加入注解:

   这里着重介绍@Autowired 和 @Resource:

一、@Autowired:

1.使用:

例如在setter方法中加入注解@Autowired:

@Autowired
//    这是构造方法,设置userDao属性的值
public UserServiceImpl(UserDao userDao) {
    this.userDao = userDao;
}

 

2.@Autowired两个相关实验:

最初的UserDao的bean配置:

    <bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/>

可以通过

 

(1)修改UserDao层的bean id,例如:

<bean id="userDao1" class="com.nenu.dao.impl.UserDaoImpl"/>

 

依然可以通过!

 

(2)配置两个UserDao层的bean:

  • 一个是bean id原名,和UserServiceImpl对应的名字
  • 另一个起其他的名字,例如:
    <bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/>
    <bean id="userDao1" class="com.nenu.dao.impl.UserDaoImpl"/>

还是可以通过!!

 

(3)配置两个UserDao层的bean:

  • 随便起两个和原来bean id不一样的名字:
    <bean id="userDao1" class="com.nenu.dao.impl.UserDaoImpl"/>
    <bean id="userDao2" class="com.nenu.dao.impl.UserDaoImpl"/>

无法通过了!

 

 

3.这个实验可以说明的@AutoWired原理:

  和xml配置相比,@Autowired对应着 byName or byType ?

 

  • 先会按照byName进行装配
  • 如果没有相同的名字,就按照byType来注入
  • 而如果没有相同名字,而且有两个bean id就不知道怎样选择了

 

那么如果容器需要两个不同名字的对象怎么办?

下面我们看@Resource标签。


 

 

二、@Resource

 1.使用:

 例如在setter方法中加入注解@Resource:

    @Resource(name = "userDao1")
    public void setUserDao(UserDaoImpl userDao) {
        this.userDao = userDao;
    }

这样就可以解决@Autowired解决不了的上述问题了。

 

 

总结

今天基于注解实现bean的自动装配就完成啦!小伙伴们有问题欢迎一起探讨!加油~

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!