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


     

    说明

    如图,项目目录:

     

    注解的方式:

    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的自动装配就完成啦!小伙伴们有问题欢迎一起探讨!加油~

  • 相关阅读:
    delphi vcl图像的二值化
    黑科技工具,推荐两款开源自动生成代码神器!
    推荐一款最强Python自动化神器!不用写一行代码!
    Java 展开或折叠PDF中的书签
    C# / VB.NET 获取PDF文档的数字签名信息
    滚蛋了
    MySQL 执行计划
    MySQL优化索引
    延时队列 DelayQueue
    【MongoDB】MongoDB 的存储过程
  • 原文地址:https://www.cnblogs.com/yangf428/p/12300331.html
Copyright © 2020-2023  润新知