还有注意的是,要使用注解来注入的话,要加入相关的jar包lib/j2ee/common-annotations.jar
对于spring的配置文件applicationContext.xml的头子要配置一下,因为要注册一下多个对注解解释的处理器
用自动注入的是用的是注解的方式,主要有两种@Autowired,@Resource,首先要声明的是
对于注解,xml这些东西是不会工作的,他们只是一个配置的作用,主要的工作是由spring的容器来完成,注解的完成思路是注解加入到相应的字段或者方法的上面,得到相应的字段名或者方法名,然后到配置文件中取找,找到了就注入
一,@Autowired(默认是根据类型来到spring的配置文件中找bean)
它是由spring提供的
要用@Autowired的话,在配置文件中:
<context:annotation-config/>
在相应的字段或者方法上面加上@Autowired
字段:
@Autowired private DaoBean daoBean ;//默认是按照类型找
//@Autowired @Qualifier("daoBea") private DaoBean daoBean ;
//上面是按照名字找,如果没有找到就会报错
//@Autowired(required=true) @Qualifier("daoBea") private DaoBean daoBean ;
//上面的request的是说一定要注入值
或者setter方法:
private DaoBean daoBean ;
@Autowired
public void setDaoBean(DaoBean daoBean){//相应的setter方法
this.daoBean = daoBean ;
}
二,@Resource(默认按照名字到配置文件中找,如果名字没有找到,就会按照类型找)
他是由j2ee提供的
要用到@Resource的话,在配置文件中:
<context:annotation-config/>
在相应的字段或者方法上面加上@Resource
字段:
@Resource private DaoBean daoBean ;
//按照名字找如果没找到不会在按照类型找了,报错
@Resource(name="daoBean") private DaoBean daoBean ;
或者setter方法:
private DaoBean daoBean ;
@Resource
public void setDaoBean(DaoBean daoBean){//相应的setter方法
this.daoBean = daoBean ;
}
用扫描包的方式注入:
<context:component-scan base-package=""/>这个会自动注册很多的处理器
在类的上面加@service ,@Repository,@Controller,@Component指定我这个类要被spring来管理;
对扫描到的类,就是相当于在配置文件中写<bean></bean>,这样我们就不要到配置文件中自己来配置了,为了防止以后真实项目中有成千上万个<bean>使得配置文件很臃肿
注意的是,这里面的属性还是需要注入的,这个扫描只是对自己这类而言,里面的属性还是要注入的
//这里如果不配置名字,那么默认是为类名,把第一个字母小写
@Service("serviceBean") @Scope("prototype")
public class ServiceBean3 {
@Resource private DaoBean daoBean ;//注入这个daoBean
//初始化注解
@PostConstruct
public void init(){
System.out.println("初始化方法");
}
//销毁的方法
@PreDestroy
public void destory(){
System.out.println("销毁的方法");
}
}
自动注入
public class ServiceBean3 {
//在配置文件中配置后daoBean会自动注入
private DaoBean daoBean ;
//自动注入的时候要记得写setter方法
public void setDaoBean(DaoBean daoBean){
this.daoBean = daoBean;
}
}
配置文件中
<bean id="serviceBean" class="service" autowire="byName"/>
autowird里面可以还其他的指:byType(通过类型),constructor(通过构造方法),
autodetect(自动选择byType还是constructor), no ,defualt;
ps:
用注解的方式:
只配置一次:<context:annotation-config/>
对于每个包的扫描:<context:component-scan base-package="hwt.service"/>
如果不用xml的配置的话,那么就要使用在配置文件中注册处理器:
对于事务:<tx:annotation-driven transaction-manager="transactionManager"/>
对于AOP: <aop:aspectj-autoproxy/>