1. 全注解配置
在Java中写Xml配置Bean还是比较麻烦,因此,Spring还提供了使用注解来配置的文件。我们可以来看一下,注解是怎么来配置这个Xml的配置使用注解流程步骤
1.1. 配置context命名空间
<?xml version="1.0" encoding="UTF-8"?>
<!--添加context空间-->
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
1.2. 第一步:配置让Spring扫描类与支持注解
<!--
@Component 普通仓库(也是组件)
@Repository 仓库(其实就是dao层)
@Service service层
@Controller 控制层(servlet、action)
-->
<!-- 进行包的扫描,去看类上面是否有相应的标签配置 -->
<context:component-scan base-package="com.cxp.spring" />
<!-- 这个不是必须的(spring3.2版本前使用) 配上后兼容性好 -->
<context:annotation-config />
1.3. 第二步:在类里面加上注解
1.3.1. Dao
@Repository
public class UserDao {
public void save(){
System.out.println("保存数据xxxx....");
}
}
1.3.2. Service
@Service
public class UserService {
@Autowired
private UserDao userDao;
public void save(){
userDao.save();
}
}
1.3.3. Action
@Controller
@Scope(“prototype”)
//默认是"singleton"
public class UserAction {
@Autowired
private UserService userService;
public String save(){
userService.save();
return "success";
}
}
1.4. 注解配置bean的名称
1.4.1. 接口有两个实现(可能性比较少)
完成之后,大家注意,现在的配置还有一个问题,比如说我按真实情况来一个Dao接口,然后这个接口有两个实现,现在就会出问题
IUserDao (UserJdbcDaoImpl/UserJpaDaoImpl)
而我们声明的时候就是使用了IUserDao
@Service
//此时会就出错:因为Spring不知道你用的是哪一个dao的实现
public class UserService {
@Autowired
private IUserDao userDao;
public void save(){
userDao.save();
}
}
1.4.2. 解决的方案:
//为dao生成的bean加上名称,我们在调用的时候确定名称即可。
@Repository("userJdbcDao")
public class UserJdbcDaoImpl implements IUserDao{
public void save(){
System.out.println("保存数据xxxx....");
}
}
@Repository("userJpaDao")
public class UserJpaDaoImpl implements IUserDao{
public void save(){
System.out.println("保存数据xxxx....");
}
}
1.5. 调用名称两套方案:
1.5.1. 方案一:使用@Autowired
@Service
public class UserService {
@Autowired
@Qualifier("userJdbcDao")
private IUserDao userDao;
public void save(){
userDao.save();
}
}
1.5.2. 方案二:使用@Resource
@Service
public class UserService {
@Resource(name="userJpaDao")
private IUserDao userDao;
public void save(){
userDao.save();
}
}
1.6. 问题:使用哪一种注解来解决比较好?
如果你用的是Spring的注解,尽量全部使用Spring的标签
2. 使用xml版手动注入,xml自动注入还是注解版?
- 初学使用xml版,手动注入
- 熟练之后可以使用xml自动注入
- 以后趋势:注解版
- 如果是注解版,就全部使用注解(自己写类),不要混用,其它框架已经写好的类仍然使用xml进行配置
- 如果是xml版,在测试的使用必须使用注解注入(因为测试框架使用注解版)
- 只有自己写的类,才可以全部用注解,别人写的类使用注解必须去修改别人的源码,添加响应的注解标志