• Spring 如何使用注解装配Bean呢?


    转自:

    Spring 如何使用注解装配Bean呢?

    我们都知道在Spring中,可以使用xml可实现 Bean状态操作,
    但是如果有非常多的Bean时,就会出现大量的xml,这样就会导致配置文件非常的大,并且容易出错及难维护
    Java 从JDK5.0以后,提供Annotation(注解)功能
    然后Spring 2.5 版本也提供对 Annotation 技术的全面支持,那么此时我们就可以使用注解进行依赖开发

    注意事项:
        启用注解功能时,需在配置文件中添加以下配置信息
    在配置文件中添加 ,启用注解 
    

    Spring 中常用的注解如下

    1.@Component

    可以使用此注解描述 Spring 中的 Bean,但它是一个泛化的概念,仅仅表示一个组件(Bean),并且可以作用在任何层次。使用时只需将该注解标注在相应类上即可。

    2.@Repository

    用于将数据访问层(DAO层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同。

    3.@Service

    通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。

    4.@Controller

    通常作用在控制层(如 Struts2 的 Action、SpringMVC 的 Controller),用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。

    5.@Autowired

    可以应用到 Bean 的属性变量、属性的 setter 方法、非 setter 方法及构造函数等,配合对应的注解处理器完成 Bean 的自动装配工作。默认按照 Bean 的类型进行装配。

    6.@Resource

    作用与 Autowired 相同,区别在于 @Autowired 默认按照 Bean 类型装配,而 @Resource 默认按照 Bean 实例名称进行装配
    @Resource 中有两个重要属性:name 和 type
    Spring 将 name 属性解析为 Bean 的实例名称,type 属性解析为 Bean 的实例类型
    当指定 name 属性,则按实例名称进行装配
    当指定 type 属性,则按 Bean 类型进行装配
    当都不指定,则先按 Bean 实例名称装配,如果不能匹配,则再按照 Bean 类型进行装配
    如果都无法匹配,则抛出 NoSuchBeanDefinitionException 异常

    7.@Qualifier

    与 @Autowired 注解配合使用
    默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,Bean 的实例名称由 @Qualifier 注解的参数指定。


    1. 创建 SpringDemo 项目
    2. 在src 目录下创建 com.java265 包
    3. 添加相应的 jar 包,可以查看我的第一个Spring程序
    4. 在 com.java265 包下创建 UserDao、UserDaoImpl、UserService、UserServiceImpl、UserController 和 MainApp 类
    5. 在 src 目录下创建 Spring 配置文件 Beans.xml
    6. 运行 SpringDemo 项目

    UserDao.java 代码

    package com.java265;
    public interface UserDao {
        /**
         * 输出方法
         */
        public void showInfo();
    }
    
    

    UserDaoImpl.java 代码

    package com.java265;
    import org.springframework.stereotype.Repository;
    
    @Repository("userDao")
    public class UserDaoImpl implements UserDao {
        @Override
        public void showInfo() {
            System.out.println("Java爱好者");
        }
    }
    
    

    UserService.java

    package com.java265;
    public interface UserService {
        /**
         * 输出方法
         */
        public void showInfo();
    }
    

    UserServiceImpl.java

    package com.java265;
    import javax.annotation.Resource;
    import org.springframework.stereotype.Service;
    @Service("userService")
    public class UserServiceImpl implements UserService{
       
        @Resource(name="userDao")
        private UserDao userDao;
       
        public UserDao getUserDao() {
            return userDao;
        }
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
        @Override
        public void showInfo() {
            userDao.showInfo();
            System.out.println("爱Java的程序媛");
        }
    }
    

    UserController.java 代码

    package com.java265;
    import javax.annotation.Resource;
    import org.springframework.stereotype.Controller;
    @Controller("userController")
    public class UserController {
        @Resource(name = "userService")
        private UserService userService;
        public UserService getUserService() {
            return userService;
        }
        public void setUserService(UserService userService) {
            this.userService = userService;
        }
        public void showInfo() {
            userService.showInfo();
            System.out.println("专注于分享Java教程");
        }
    }
    

    Beans.xml 代码如下。

    
    
        
        
    
    
    

    MainApp.java

    package com.java265;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    public class MainApp {
        public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("Beans.xml");
            UserController uc = (UserController) ctx.getBean("userController");
            uc.showInfo();
        }
    }
    
    

    运行结果---
    Java爱好者
    爱Java的程序媛
    专注于分享Java教程

  • 相关阅读:
    R语言鸢尾花iris数据集的层次聚类分析
    VTK网格细分-vtkAdaptiveSubdivisionFilter
    Word控件Spire.Doc 【表单域】教程(七):在 C#、VB.NET 中的 Word 中创建对书签的交叉引用
    从驾考科目二到自动驾驶,聊聊 GPU 为什么对自动驾驶很重要
    python爬虫开源项目代码大学校园短视频社交软件系统-微信小程序
    SpringBoot整合redis+mysql
    深度学习(PyTorch)——DataLoader的使用方法
    开源社区ECE:Elastic认证考试复盘总结134贴
    C++对象内存布局
    深度神经网络和人工神经网络区别
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/127700503