Spring2.5之前Spring只提供xml配置开发,Spring2.5之后提供注解开发Spring.
基于XML配置开发和基于注解开发各自都有优点,就目前趋势和开发效率而言,强烈推荐使用注解开发。
1.@Component:基本注解
2.@Respository:标识持久层组件
3.@Service:标识服务层(业务层)组件
4.@Controller:标识控制器组件(Struts2.x里的Action或Spring MVC的Controller)
备注:以上四种组件其实并没有区别,只不过是名称不同更好的细分.
备注:对于扫描到的组件,Spring有默认的命名策略:将类名第一个字母小写.也可以在注解中通过value属性值标识组件的名称.
1、@Autowired(Spring提供支持)
2、@Resource(Java自带支持)
3、@Inject(Java自带支持)
日常开发中使用Autowired也可以,但是遇到组件名有冲突时那么需要借助Qualifier注解来过滤。
遇到组件冲突情况时,也可以使用Resource注解,Resource注解可以配置name过滤。
举例
UserDao接口
UserDaoJdbcImpl实现
UserDaoJpaImp实现
当UserDao接口有多种实现时,如果只使用Spring的默认自动装配那么就会出现冲突了。
public interface UserDao
{
void addUser();
}
@Repository(value = "userDaoJdbc")
public class UserDaoJdbcImpl implements UserDao
{
@Override
public void addUser()
{
System.out.println("jdbc addUser...");
}
}
@Repository(value = "userDaoJpa")
public class UserDaoJpaImpl implements UserDao
{
@Override
public void addUser()
{
System.out.println("jpa addUser...");
}
}
@Service(value="userService")
public class UserService
{
//方式1
// @Autowired
// @Qualifier(value="userDaoJdbc")
//方式2
// @Resource(name="userDaoJpa")
@Resource(name="userDaoJpa")
private UserDao userDao;
public void addUser()
{
userDao.addUser();
}
}
备注:如果仅仅使用Autowired,那么上述情况Spring加载时就无法确定到底初始化那个对象了,因此会报错。
@Scope
@Value
@Qualifier
@Lazy
@AliasFor
@Order
@Primary
@Required
@PostConstruct
@PreDestory
@Bean
@Configuration
@ComponentScan
@ComponentScans
Spring基于注解开发比较简便,注解开发也是趋势。