基于注解开发一直都是推荐的开发方式,合理地使用注解,可以达到0配置的效果,本文介绍一下关于Spring的基于注解开发。
首先的,Spring的核心配置文件中需要加入相应约束,并加入标签,如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd "
default-autowire="byName">
<context:component-scan base-package="lfq.ima"></context:component-scan>
</beans>
标签为context:component-scan,很容易从字面上翻译,这是一个组件扫描标签,其中的base-package属性可以加入包名,将一个包内的带组件注解的类加入到Spring容器当中:
如下:
@Component("userDao")
public class UserDao {
@Autowired
private UserDao2 userDao2;
public UserDao2 getUserDao2() {
return userDao2;
}
public void setUserDao2(UserDao2 userDao) {
this.userDao2 = userDao;
}
public void say()
{
System.out.println("hello!");
userDao2.say();
}
}
除了Component以外还有三种组件注册注解提供使用,分别是@Controller、@Service、@Repository,分别标注为控制层、业务逻辑层、持久层的组件。其实和Component并无太大的差别,一方面方便区分模块,一方面方便后期Spring的功能扩展。
属性注入方面,提供了几个注解,其中就有@AutoWired、@Resource,两者都可以完成对象依赖的注入,区别在于前者默认按照类型注入(寻找相同类型的对象注入),后者默认按照bean的name注入,先bean名字和属性名字对应注入,否则就按照类型注入。前者默认对象必须要存在,如果允许对象为空需要添加@AutoWired(required=false)。前者当我们需要强制使用bean的名字注入时,需要配合@Autowired() @Qualifier("baseDao")如此使用,而后者则可以直接@Resource("baseDao")。前者为Spring提供,后者为Java提供。
注:<context:annotation-config/>是用于开启bean中注入注解的扫描,依旧还是要将bean写进配置文件中。<context:component-scan base-package="lfq.ima"></context:component-scan>不仅有着前者的功能,而且还能扫描包下的组件。
上述为最简单的bean注册注解以及注入注解介绍,下面深入讲解一下以上注解。
首先,除了@Resource和@Autowired以外还有@Value可以实现简单数据的注入,这是关于注入注解的完善解释。
组件扫描注解仅仅只有以上注解当然也是完全不够的,要知道,一个bean还有着scope属性,所以,就有了@Scope用于标记bean的类型,单例或者多例。@PostConstruct :相当于 init-method;@PreDestroy :相当于 destroy-method。
下图为基于XML和基于注解开发的异同: