spring的IOC注解
Spring的IOC注解使用
第一步:
在配置文件中添加context的规范以及组件扫描
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd ">
<!--使用IOC的注解,配置组件扫描-->
<context:component-scan base-package="com.spring.daoImp"></context:component-scan>
</beans>
第二步:在实现类上添加注解@Component,在需要注入的属性上添加@Value
import com.spring.dao.UserDao;
import org.springframework.stereotype.Component;
@Component("userDao")//相当于<bean id="userDao" class="com.spring.daoImp.UserDaoImpl"></bean>
public class UserDaoImpl implements UserDao {
private String name;
public void say() {
System.out.println("你好啊"+name);
}
//如果没有set方法,则将@Value添加在定义属性的语句上面
@Value("张三")
public void setName(String name){
this.name = name;
}
}
第三步:测试
public void test1(){
//创建spring的工厂
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
UserDao bean = (UserDao) context.getBean("userDao");
bean.say();
context.close();
}
Spring的IOC的注解详解
@Component
作用:修饰一个类,将这个类交给Spring管理
这个注解有三个衍生注解
@Repository :Dao层
@Service :service层
@Controller :web层
属性注入的注解
- 普通属性
@Value - 对象类型的属性
@Autowired //设置对象类型的属性值,按照类型完成属性注入
@Autowired与@Qualifier(value="") //按照名称来完成属性注入@Resource(name="")//按照名称来完成属性注入,该属性不属于spring框架
bean生命周期的注解
- 初始化注解
@PostConstruct - 销毁注解
@PreDestroy
例:
import com.spring.dao.UserDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component("userDao")
public class UserDaoImpl implements UserDao {
private String name;
public void say() {
System.out.println("你好啊"+name);
}
@PostConstruct //相当于init-method
public void start(){
System.out.println("bean被创建");
}
@PreDestroy //相当于destroy-method
public void end(){
System.out.println("bean被销毁");
}
@Value("张三")
public void setName(String name){
this.name = name;
}
}
bean的作用范围的注解
@Scope
值:
- singleton:单例模式
- prototype:多例
xml配置与注解配置的总结比较
基于XML配置 | 基于注解配置 | |
---|---|---|
Bean定义 | <bean id="" class="" /> | @Component@Repository@Service@Controller |
Bean名称 | 通过id或name指定 | @Component(“userDao”) |
Bean注入 | <property>或者通过p命名空间 | @Autowired按类型注入@Qualifier按名称注入 |
生命过程 | init-method destroy-method | @PostConstruct初始化 @PreDestroy销毁 |
Bean作用范围 | scope 值:singleton单例 prototype多例 | @Scope,值相同 |
context:component-scan和context:annotation-config的区别
<!--扫描指定包下的类上的注解,并注册激活bean-->
<context:component-scan base-package="com.spring.daoImp"></context:component-scan>
<!--对于已经在spring容器中注册的bean进行激活,激活后的bean可以使用类中的注解,比如Di注入的注解,bean生命周期的注解等-->
<context:annotation-config></context:annotation-config>
总体上来说context:component-scan既可以注册,也可以激活,而context:annotation-config只能激活