一些开发中用到的注解
1.@controller 控制器(注入服务)
2.@service 服务(注入dao)
3.@repository dao(实现dao访问)
4.@component (把普通的pojo实例化到spring容器中,相当于配置文件中的<bean id="" class= ""/>)
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
一、@component
定义spring管理bean
二、@repository
@component扩展,被@repository注解的pojo类表示dao层实现,从而见到该注解就想到dao层实现,使用方式和@component相同。
@service:表示service层实现
三、<content:component-scan base-package="com.mmnc">
其中base-package为需要扫描的包
四、@Resource和@Autowired注解都是用来实现依赖注入的,只是@Autowired按byType自动注入,而@Resource默认是按byName自动注入的。
@Resource有两个重要的属性,分别是name和type
spring将name属性解析为bean的名字,而type属性则是解析为bean的类型。所以如果使用name属性,则使用byName的自动注入。
@Resource依赖注入时查找bean的规则:
1.既不指定name属性,也不指定type属性,则自动按byName方式进行查找。如果没有找到符合的bean,则回退为一个原始类型进行查找。
@Value("#{}")与@Value("${}")的区别
@RestController
@RequestMapping("/login")
@Component
public class LoginController {
@Value("#{1}")
private int number; //获取数字 1
@Value("#{'Spring Expression Language'}") //获取字符串常量
private String str;
@Value("#{dataSource.url}") //获取bean的属性
private String jdbcUrl;
@Autowired
private DataSourceTransactionManager transactionManager;
@RequestMapping("login")
public String login(String name,String password) throws FileNotFoundException{
System.out.println(number);
System.out.println(str);
System.out.println(jdbcUrl);
return "login";
}
}
当bean通过@Value(#{“”})获取其他bean的属性,或者调用其他bean的方法时,只要该bean(A)能够访问到被调用的bean(B),那就说明要么A和B时在同一个容器,或者B所在容器是A所在容器的父容器。例如上面的代码,dataSource这个bean一般是在springContext.xml文件中申明的,而loginController这个bean一般是在springMVC.xml文件中申明的,虽然这两个bean 不在一个容器,但是loginCOntroller所在容器继承了dataSource所在的容器。
@Value(“${}”)可以获取对应属性文件中定义的属性值。
@postconstruct初始化的操作
从javaEE 5规范开始,servlet中增加了两个影响servlet生命周期的注解;@PostConstruct @PreDestroy
这两个注解被用来修饰一个非静态的void()方法。
@PostConstruct
public void init(){}
或者 public @PostConstruct void init(){}
被@PostConstruct修饰的方法会在服务器加载servlet的时候运行,并且只会被服务器执行一次。
PostConstruct在构造函数之后执行,init()方法之前执行。
PreDestroy方法在destroy方法执行之后执行
服务器加载servlet ------ servlet构造函数 ------- PostConstruct ---------- Init --------service -------destroy --------PreDestroy -------服务器卸载servlet完毕
需要注意的是,注解会多多少少的影响服务器的启动速度,服务器在启动时候回遍历web应用下(WEB-INF/classes下的所有class文件与WEB-INF/lib)的所有jar文件,检查哪些类使用了注解。如果应用程序中没有使用任何注解,可以在web.xml设置。