zoukankan      html  css  js  c++  java
  • 注解装配Bean

    @Service用于标注业务层组件
    @Controller用于标注控制层组件
    @Repository用于标注数据访问组件,即DAO组件
    @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

    在一个稍大的项目中,如果组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。
    Spring2.5为我们引入了组件自动扫描机制,他在类路径下寻找标注了上述注解的类,并把这些类纳入进spring容器中管理。
    它的作用和在xml文件中使用bean节点配置组件时一样的。要使用自动扫描机制,才能把这些注解类纳入Spring容器中管理。

    ========================================================================

    @Autowired 默认是通过byType方式进行自动装配的,通过结合@Qualifier注解可以通过匹配Bean的id进行自动装配。
    a、@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入;
    b、@Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualifier一起使用;
    c、@Resource注解是由J2EE提供,而@Autowired是由Spring提供,故减少系统对spring的依赖建议使用@Resource的方式;
    d、@Resource和@Autowired都可以书写标注在字段或者该字段的setter方法之上

    代码:

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Scope;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.stereotype.Controller;
    import org.springframework.stereotype.Repository;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    
    public class Main {
    
        public static void main(String[] args) {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
            UserService service=(UserService)applicationContext.getBean("userService");
            User user1 = (User) applicationContext.getBean("user");
            User user2 = (User) applicationContext.getBean("user");
            user1.setName("小明");
            user1.setSex("男");
            user1.setAge(22);
    
            user2.setName("小红");
            user2.setSex("女");
            user2.setAge(18);
    
            service.add(user1);
            service.add(user2);
        }
    }
    
    @Repository("user")
    @Scope("prototype")
    //@Repository用于标注数据访问组件,即DAO组件
    //@Scope("prototype")让其每次返回不同的实例,默认是单例
      class User {
        private String name;
        private String sex;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        private int age;
    
    
    }
    
      interface UserDao {
        public void add(User user);
    }
    
    
    @Controller("userDao")
    //@Controller用于标注控制层组件
      class UserDaoImp implements UserDao{
    
        @Override
        public void add(User user) {
            System.out.println(user.getName());
            System.out.println(user.getSex());
            System.out.println(user.getAge());
        }
    
    }
    
    @Service("userService")
    //@Service用于标注业务层组件
      class UserService {
        //setter注入接口、面向接口编程
        private UserDao userdao ;
        public void add(User user){
            userdao.add(user) ;
        }
        public UserDao getUserdao() {
            return userdao;
        }
        //注解
        @Resource(name="userDao")
        public void setUserdao(UserDao userdao) {
            this.userdao = userdao;
        }
    }

    bean.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" xmlns:p="http://www.springframework.org/schema/p"
           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
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
    <context:component-scan
            base-package="com.company">
    </context:component-scan>
    </beans>

    结果:

    小明
    男
    22
    小红
    女
    18

    @Bean跟@Component的区别

    这两个还是挺像的

    区别是,@Component可以通过类路径扫描自动发现,一般用在被自动扫描和装配的类上。

    @Bean主要用在配置类的方法上,来显示声明要生成的类。

    @Configuration,在该注释下修饰的类中的方法或者字段,是使用CGLib创建的代理对象对其进行操作。

    http://blog.csdn.net/evankaka/article/details/45042397

    http://casheen.iteye.com/blog/295348

    http://blog.csdn.net/ttjxtjx/article/details/49866011

  • 相关阅读:
    数据处理之求和语句,retain语句
    Day1 Excel基本知识
    Day6 数据清洗(2)
    Day5 数据的清洗
    Day5 快速输入数据的方法(2)
    Day5 快速输入数据的方法
    Day4 利用小技巧进行快速数据处理
    Day3 Excel与数据分析之小技巧
    Day2 Excel与数据处理之定位条件、选择性粘贴及查找功能
    day5:python学习之集合
  • 原文地址:https://www.cnblogs.com/hongdada/p/6433656.html
Copyright © 2011-2022 走看看