一、使用注解實現IoC的配置
/**
* 員工實現類,實現Dao接口,負責User類的持久化操作
**/
//通過注解定義一個DAO
@Component("employeeDao")
public class EmployeeDaoImpl implements EmployeeDao{
public void save(Employee employee){
//這里並未實現完整的數據庫操作,僅為說明問題
System.out.printLn("保存用戶信息到數據庫");
}
}
以上代碼通過注解定義了一個名為employeeDao的Bean 與<bean id="employeeDao" class="com.dao.impl.EmployeeDaompl"/>
等效。除了@Component,Spring還提供了3個特殊的注解
@Repository:用於標注DAO類
@Service:用於標注業務類
@Controller:用於標注控制器類
二、使用注解實現自動裝配
1、Spring提供了@Autowired注解實現Bean的自動裝配
/**
*員工業務類,實現對Employee功能的業務管理
**/
@Service("employeeBiz");
public class EmployeeBizImpl implements EmployeeBiz{
//聲明接口類的引用和具體實現類解耦和
@AutoWired
private EmployeeDao employeeDao;
//構造函數 得到SessionFactory
@Autowired
public ClaimVoucherDaoImpl(@Qualifier("sessionFactory") SessionFactory sessionFactory){
this.setSessionFactory(sessionFactory);
}
public ClaimVoucherDaoImpl(){
}
}
以上代碼通過@Service標注一個業務Bean,並使用@Autowired為dao屬性設置自動裝配,且@AutoWired默認采用
按類型的方式
2、若要采用按名稱匹配的方式,則可以使用@Qualifier指定
/**
*員工業務類,實現對Employee功能的業務管理
**/
@Service("employeeBiz");
public class EmployeeBizImpl implements EmployeeBiz{
//聲明接口類的引用和具體實現類解耦和
@AutoWired
@Qualifier("employeeDao");
private EmployeeDao employeeDao;
//構造函數 得到SessionFactory
@Autowired
public ClaimVoucherDaoImpl(@Qualifier("sessionFactory") SessionFactory sessionFactory){
this.setSessionFactory(sessionFactory);
}
public ClaimVoucherDaoImpl(){
}
}
3、@Autowired也可以對方法進行標注
/**
*員工業務類,實現對Employee功能的業務管理
**/
@Service("employeeBiz");
public class EmployeeBizImpl implements EmployeeBiz{
//聲明接口類的引用和具體實現類解耦和
private EmployeeDao employeeDao;
//dao屬性的setter訪問器
@AutoWired
public void setEmployeeDao(EmployeeDao employeeDao){
this.employeeDao = employeeDao;
}
//構造函數 得到SessionFactory
@Autowired
public ClaimVoucherDaoImpl(@Qualifier("sessionFactory") SessionFactory sessionFactory){
this.setSessionFactory(sessionFactory);
}
public ClaimVoucherDaoImpl(){
}
}
三、使用注解實現控制
@Controller("employeeAction")
public class EmployeeAction extends ActionSupport {
//封裝雇員登陸的信息
private SysEmployee sysemployee;
//雇員業務屬性
@Autowired
@Qualifier("employeeBiz")
private EmployeeBiz employeeBiz;
//封裝getter和setter 進行設值注入
public EmployeeBiz getEmployeeBiz() {
return employeeBiz;
}
public SysEmployee getSysemployee() {
return sysemployee;
}
public void setSysemployee(SysEmployee sysemployee) {
this.sysemployee = sysemployee;
}
public void setEmployeeBiz(EmployeeBiz employeeBiz) {
this.employeeBiz = employeeBiz;
}
}
四、使用注解指定Bean的作用域
/**
*員工業務類,實現對Employee功能的業務管理
**/
@Scope("prototype");
@Service("employeeBiz");
public class EmployeeBizImpl implements EmployeeBiz{
//聲明接口類的引用和具體實現類解耦和
@AutoWired
@Qualifier("employeeDao");
private EmployeeDao employeeDao;
}
五、加載注解定義的Bean
<!--掃描包中注解標注的類-->
<context:component-scan base-package="com.bdqn" />