spring注解方式实现DI和IOC
2016-04-26 16:08
543 查看
注解复习:
1、注解就是为了说明java中的某一个部分的作用(Type) 2、注解都可以用于哪个部门是@Target注解起的作用 3、注解可以标注在ElementType枚举类所指定的位置上 4、 元注解 @Documented //该注解是否出现在帮助文档中 @Retention(RetentionPolicy.RUNTIME) //该注解在java,class和运行时都起作用 @Target(ElementType.ANNOTATION_TYPE)//该注解只能用于注解上 public @interface Target { ElementType[] value(); } 5、用来解析注解的类成为注解解析器 @Resource注解-给引用型属性赋值@Resource注解的使用规则:
1、在spring的配置文件中导入命名空间
xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd2、引入注解解析器 <context:annotation-config></context:annotation-config>3、在spring的配置文件中把bean引入进来 4、在一个类的属性上加 @Resource(name="student_annotation") private Student student; 从@Resource注解本身 @Target({TYPE, FIELD, METHOD}) @Retention(RUNTIME) public @interface Resource { String name() default ""; } 1、该注解可以用于属性上或者方法上,但是一般用户属性上 2、该注解有一个属性name,默认值为"" 5、分析整个过程: 1、当启动spring容器的时候,spring容器加载了配置文件 2、在spring配置文件中,只要遇到bean的配置,就会为该bean创建对象 3、在纳入spring容器的范围内查找所有的bean,看哪些bean的属性或者方法上加有@Resource 4、找到@Resource注解以后,判断该注解name的属性是否为""(name没有写) 如果没有写name属性,则会让属性的名称的值和spring中ID的值做匹配,如果匹配成功则赋值 如果匹配不成功,则会按照类型进行匹配,如果匹配不成功,则报错 如果有name属性,则会按照name属性的值和spring的bean中ID进行匹配,匹配成功,则赋值,不成功则报错 注解方式给引用型属性赋值的例子:Person类
public class Person { private Long id; private String name; @Resource(name="student_ann") private Student student; public void show(){ student.show(); } }Student类
public class Student { public void show() { System.out.println("student show"); } }
测试
public class Test_Annotation_di { @Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Person p = (Person) context.getBean("person_ann"); p.show(); } }spring配置文件applicationConetxt.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:annotation-config></context:annotation-config> <bean id="person_ann" class="annotation.di.Person" ></bean> <bean id="student_ann" class="annotation.di.Student"></bean> </beans>
类扫描的注解-IOC:
1、在spring的配置文件中导入命名空间 xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 2、<context:component-scan base-package="cn.itcast.annotation.scan"></context:component-scan> 1、 该注解解析器包含了两个功能:依赖注入和类扫描 2、在base-package包及子包下查找所有的类 3、如果一个类上加了@Component注解,就会进行如下的法则 (1)如果其value属性的值为" " @Component public class Person {} 相当于<bean id="person" class="..Person"> (2)如果其value属性的值不为" " @Component("p") public class Person {} 相当于 <bean id="p" class="..Person"> 4、按照@Resource的法则再次进行操作 注解方式实现控制反转的例子:Person类@Component("person_scan") public class Person { @Resource(name="student_scan") private Student student; public void show(){ student.show(); } }
Student类
@Component("student_scan") public class Student { public void show(){ System.out.println("annotation ioc student show"); } }
测试
public class Test_Scan { @Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Person p = (Person) context.getBean("person_scan"); p.show(); } }
spring配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <!-- 类扫描的注解解析器 component 指的就是一个类 base-package 在该包及子包中进行扫描--> <context:component-scan base-package="annotation.ioc"></context:component-scan> </beans>
相关文章推荐
- Spring AOP 常用的四种实现方式
- eclipse.ini 优化
- SpringMVC系列之主要组件
- eclipse: workspace出错导致无法启用的解决
- java实现定时任务(Quartz)
- java实现定时任务(Quartz)
- JAVA内部类的作用、方法、使用
- Java多线程中join方法的理解
- JAVA中super()作用:调用父类构造方法和构造方法链
- 通过java反射机制获取该类的所有属性类型、值、
- Java学习eclipse生成jar包
- 通过距离感应器获取实际距离[FAQ04538][Sensor]java层获得P_sensor距离传感器当前真实值,不止0,1
- Java核心技术II读书笔记(二)
- File java的文件重命名
- JAVA使用JDBC批量插入SQL
- 图的邻接矩阵存储---JAVA实现
- java集合框架12——HashMap和HashTable的区别
- struts2的Action(四)
- Java源码之String
- [org.jeecgframework.core.common.exception.MyExceptionHandler]org.springframework.