Spring注解注入

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"

//扫描包

//开启注解配置


//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注解注入)