使用注解定义Bean
Spring2.5引入使用注解去定义Bean
@Component描述Spring框架中Bean
在xml中引入context
xmlns:context="http://www.springframework.org/schema/context"
在xml中配置需要的包
<context:component-scan base-package="cn.jiaoshoublog.demo1"/>
在这个包中的类使用Component注解
package cn.jiaoshoublog.demo1;
import org.springframework.stereotype.Component;
@Component("userService")
public class UserService {
public String sayHello(String name) {
return "Hello"+name;
}
}
除了@Component外, Spring提供了3个功能基本和@Component等效的注解
@Repository用于对DAO实现类进行标注
@Service用于对Service实现类进行标注
@Controller用于对Controller实现类进行标注
这三个注解是为了让标注类本身的用途清晰, Spring在后续版本会对其增强
@value注解,对简单属性的注解
package cn.jiaoshoublog.demo1;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserService {
@Value("屎")
private String something;
public void eat() {
System.out.println("吃:"+something);
}
}
如果使用此类中的eat会打印出 “ 吃:屎 ”
@Autowired按类型来注入,注入的对象是安装类来注入的
使用@Autowired进行自动注入
@Autowired默认按照类型进行注入
如果存在两个相同Bean类型相同,则按照名称注入
@Autowired注入时可以针对成员变量或者set方法
通过@Autowired的required属性,设置-定要找到匹配的Bean
使用@Qualifier指定注入Bean的名称
使用Qualifier指定Bean名称后,注解Bean必须指定相同名称
使用方法
package cn.jiaoshoublog.demo1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserService {
@Autowired
@Qualifier("UserDao")//指定Bean名
private UserDaouserDao;
public void save() {
System.out.println("Service中的保存用户");
userDao.save();
}
}
被注入的对象
package cn.jiaoshoublog.demo1;
import org.springframework.stereotype.Repository;
//使用@Autowired注入和@Repository("xxx")中的xxx没有任何关系
@Repository("UserDao")
public class UserDao {
public void save() {
System.out.println("Dao中的保存用户");
}
}
Spring提供对JSR-250中定义@Resource标准注解的支持
@Resdurce和@Autowired注解功能相似
使用方法相当于上面的两行代码@Autowired @Qualifier("UserDao")
这两行代码相当于 @Resdurce(name="UserDao")
其他注解
Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法。@Scope()来指定单例还是多例