初学spring的时候,我们都使用spring的配置文件applicationContext.xml(默认名,名字可以改)中的bean标签,来实现spring ioc容器来管理生成对象,那么这就会有一个问题,当我们的类多起来的时候,那么xml文件中就会有太多的bean,看上去着实是头疼,为了解决这个问题,注解横空出世。
使用注解能够让xml文件减肥,并且清晰易懂;
下面来看看常使用的注解:
@Service
@Repository
把这两个放在一起讲,个人感觉并没有太大的区别,而@Repository就是使用在model层的dao中,而@service就是在服务层中,这样的好处自然是更加的清晰,一看就知道这个类是属于哪个层次了;
就那以其中的一个举例子:
@Repository("userDao")
public class UserDaoImp extends SqlSessionDaoSupport implements UserDao{
上面的意思其实就等同于:
<bean id="userDao" class="包.UserDaoImp"/>
@Repository("userDao")你也可以@Repository,不写名字,那么默认为类名首字母小写,也就是userDaoImp
@Autowired 自动装配
当我们在一个类中定义属性的时候,我们需要在bean中来设置属性的值,@service和@repository帮助我们省略了bean标签的设置,那么属性值的设置就由自动装配标签来注入属性值,上代码:
@Repository("userDao")
public class UserDaoImp extends SqlSessionDaoSupport implements UserDao{
public class UserServiceImp extends SqlSessionDaoSupport implements BaseService{
@Autowired
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
这样就在UserServiceImp中注入了userDao
扫描二维码关注公众号,回复:
2326646 查看本文章
当然了,该注解也可以使用在方法中,来注入参数:
@Autowired//自动装配,从application.xml中
@Override
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
// TODO Auto-generated method stub
System.out.println("i am sqlsesion");
super.setSqlSessionFactory(sqlSessionFactory);
}
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
说明一下,该注解是通过type来注入的,也就是根据在bean标签中的class来注入的,如果在xml中同一个class有两个bean,那么将会出错
注意点:需要跟上set方法,否则报错;
@Scope
这个一看就能猜出来,用来设置作用域,比如spring mvc中的controller默认是单例,可以使用该注解设置为原型
@Controller("firstController")
@Scope("prototype")
public class FirstController {
原型:每次访问都生成一个对象
另外,使用注解需要在applicationContext.xml中设置
<context:component-scan base-package="包名.类名"/>
告诉容器,我们使用了注解