• 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教程

  • 相关阅读:
    聊聊JAVA中的锁优化锁升级及其底层原理剖析
    Halcon知识:用分箱实现OCR分类器
    【yolov4】基于yolov4深度学习网络目标检测MATLAB仿真
    海量数据去重的hash,bitmap与布隆过滤器Bloom Filter
    数据特征工程 | Python实现CatBoost特征处理及选择
    Android 逆向
    24.Python文件I/O(二)【异常处理&断言assert】
    根据PromiseA+规范从零实现Promise【这一次,带你彻底搞懂Promise使用和原理】
    java计算机毕业设计社区人员管理系统源码+系统+mysql数据库+lw文档+部署
    软件开发过程中的办公文档使用
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/127700503