1.到底什么是注解?
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
其实我个人的理解注解就是一个声明的过程,有一些定义的类,接口你没有声明,按照常理来说也是不可以使用的对吧,所以为了能够调用他们,所以我们要声明一下,然后再用,这就是我个人对于注解的理解。
2.那么在spring中怎么使用注解,又有那些注解呢?
说实话,我个人的水平也不高,目前我也就学了一些常用的注解,其他的如果需要用到,上官网查看文档应该就行了。那么我们平时在开发中主要会用到哪些呢?按照我现在所了解的一般就一下这几个(主要对应MVC三个层):
持久层(Dao):@Repository
应用层(Service):@Service
控制层(Control):@Controller //这里要说明的一点就是在action层用的时候(跟structs等框架结合的时候),我们需要注明一下应用的范围@Scope("pototype"),因为spring框架默认的scope是单例的,而structs这些要保证每次访问都要创建一个对象,保证数据的完整性,scope="prototype"来保证每一个请求有一个单独的Action来处理。
上面的就是常用的注解,但是要应用这些注解,我们还需要告诉spring,交给它来管理,这就要用到所谓的自动装配。自动装配要用到的注解(我只懂啊比较常用的是有两种):
第一种:@Autowired
@Qualifier("");//要装配的类的实例对象,注意名字要跟比定义的一致;如果是采用构造注入的话,这个要插入到构造函数那里。
一般这两个都会同时出现
第二种:@Resource //推荐使用,在要注入的地方声明一下就行;
最后介绍一种在所有的层都通用的注解@Component,上面讲到的都可以用这个替换,但为了保持层于层之间的耦合,不推荐使用。下面通过一个实例来说明一下:
完整的目录如下:
第一步要使用注解,必须在spring框架的applicationContext.xml文件里面声明:
<pre name="code" class="java"><?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!--首先要声明使用注解 不过在3.0后可以不用但最后要使用 -->
<context:annotation-config/>
<!-- 定义声明扫描,就是说那些需要注解的地方,其实驾驶自动装配 。必须要有。-->
<context:component-scan base-package="com.annotation"/>
</beans>
这样我们就可以使用注解了
首先Dao层:
package com.annotation.dao.impl;
import org.springframework.stereotype.Repository;
import com.annotation.dao.idao.IUserDao;
//虽然我们是注解UserDaoImpl,但约定成俗的我们把后面的Impl去掉;
@Repository("UserDao")
public class UserDaoImpl implements IUserDao {
@Override
public void insert() {
System.out.println("insert success--------UserDao");
}
}
接下来到Service层:
<pre name="code" class="java">package com.annotation.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.annotation.dao.impl.UserDaoImpl;
import com.annotation.service.iservice.IUserService;
@Service("UserService")
public class UserServiceImpl implements IUserService {
@Resource
private UserDaoImpl UserDao;
public void setUserDao(UserDaoImpl userDao) {
UserDao = userDao;
}
@Override
public void insert() {
UserDao.insert();
System.out.println("insert success-----------Service");
}
}
然后到了Action层:
package com.annotation.action;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import com.annotation.service.impl.UserServiceImpl;
@Controller("UserAction")
public class UserAction {
@Resource
private UserServiceImpl userService;
public void setUserService(UserServiceImpl userService) {
this.userService = userService;
}
public void insert(){
userService.insert();
System.out.println("insert success---------UserAction");
}
}
接下来我们就可以测试一下:
package com.annotation.main;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.annotation.action.UserAction;
public class domain {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserAction u = (UserAction) ctx.getBean("UserAction");
u.insert();
}
}
这样我们就完成了一个简单的注解开发实例,结果如下:
是不是体会到了很爽的感觉,所以才会更有动力学下去。