Spring注解注入

作者: 往事随风_0817 | 来源:发表于2019-02-14 23:32 被阅读12次

    Spring注解注入

    Spring2.5引入注解方式去定义Bean

    • @Component 描述Spring框架中的Bean
    //首先在XML中加入context约束
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
    
    //扫描包
    <context:component-scan base-package="com.akwangl.dome"/>
    //开启注解配置
    <context:annotation-config/>
    
    //java
    @Component("userService")
    public class UserService {
        private String something;
    
        @Autowired
        private UserDao userDao;
    
        public String sayHello(String name){
            return "Hello" + name;
        }
    
        public void eat(){
            System.out.println("eat:"+something);
        }
    
        public void save(){
            System.out.println("Service中保存用户...");
            userDao.save();
        }
    }
    
    @Repository("userDao")
    public class UserDao {
        public void save(){
            System.out.println("DAO中保存用户...");
        }
    }
    

    除了@Component外,Spring提供了3个功能基本和@Component等效的注解

    • @Repository 用于对Dao实现类进行标注

    • @Service 用于对Service实现类进行标准

    • @Controller用于对Controller实现类进行标注

    Spring属性注入-注解方式

    • 使用@Autowired进行自动注入

    • @Autowired默认按照类型进行注入,如果存在两个相同Bean类型相同,则按照名称注入

    • @Autowired注入时可以加在成员变量或者set方法上

    • 通过@Autowired的required属性,设置一定要找到匹配的Bean

    @Repository("userDao")
    public class UserDao {}
    
    @Service("userService")
    public class UserService {
    
        @Autowired
        private UserDao userDao;
    }
    
    • 使用@Qualifier找到指定name的Bena
    @Service("userService")
    public class UserService {
    
        @Autowired
        @Qualifier("userDao")
        private UserDao userDao;
    }
    

    使用Qualifier指定Bean名称后,注解Bean必须指定相同名称

    • @Resource相当于对@Autowiired和@Qualifier的一种封装
    @Service("userService")
    public class UserService {
        @Resource(name="userDao")
        private UserDao userDao;
    }
    

    Spring其他注解

    • @PostConstruct 配置init方法,当一个Bean加载到Spring中就会执行这个初始化方法
    • @PreDestroy 配置Destroy,当一个Bena从Spring销毁执行的方法(这个Bean作用域必须是scope=singleton才有效果)
    @Component("bean1")
    public class Bean1 {
        @PostConstruct
        public void init(){
            System.out.println("initBean...");
        }
    
        public void say(){
            System.out.println("say...");
        }
    
        @PreDestroy
        public void destory(){
            System.out.println("destoryBean...");
        }
    }
    

    Bean的作用范围

    使用XML方式配置Bena的作用范围与@注解方式,都会默认将作用范围设置为Singleton(单例)

    • @Scoper注解用于指定Bean的作用范围
    @Component("bean2")
    @Scope("prototype")->这里的值可以设置为:singleton、prototype、request、session
    public class Bean2 {
    
    }
    

    相关文章

      网友评论

        本文标题:Spring注解注入

        本文链接:https://www.haomeiwen.com/subject/qndueqtx.html