spring注解方式实现DI和IOC

注解复习:

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.xsd

2、引入注解解析器

<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>
时间: 2024-12-21 08:03:11

spring注解方式实现DI和IOC的相关文章

使用注解方式实现 AOP和IoC

使用注解方式实现AOP和IoC IOC和DI的注解 IOC: @Component:实现Bean组件的定义 @Repository:用于标注DAO类,功能与@Component作用相当 @Service:用于标注业务类 @Controller:用于标注控制器 DI: @Resource(name="userService") 默认ByName方式,如果name确实默认按照ByType方式注入 @Autowired 默认ByType方式,如果出现同名类,则不能按照Type进行注入 需要使

spring 注解方式配置Bean

概要: 再classpath中扫描组件 组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件 特定组件包括: @Component:基本注解,标示了一个受Spring管理的组件(可以混用,spring还无法识别具体是哪一层) @Respository:建议标识持久层组件(可以混用,spring还无法识别具体是哪一层) @Service:建议标识服务层(业务层)组件(可以混用,spring还无法识别具体是哪一层) @Con

【Quartz】基于Spring注解方式配置Quartz

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka         在上讲[Quartz]Spring3.2.9+Quqrtz2.2.1实现定时实例中,我们使用了XML的方式来配置Quartz定时任务,虽然比用API的方式简便多了,但是Spring还支持基本注解的方式来配置.这样做不仅更加简单,而且代码量也更加少了. 新建一个Java工程,导入要用到的包,Spring3.2.Quartz2.2.1.aopalliance-1.0.jar.co

Spring 注解方式实现 事务管理

使用步骤: 步骤一.在spring配置文件中引入<tx:>命名空间<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation

使用Spring注解方式管理事务与传播行为详解

使用Spring注解方式管理事务 前面讲解了怎么使用@Transactional注解声明PersonServiceBean底下所有的业务方法需要事务管理,那么事务是如何来管理的呢? 我们知道当每个业务方法执行的时候,它都会打开事务,在业务方法执行结束之后,它就会结束事务.那么它什么时候决定这个事务提交,什么时候决定这个事务回滚呢?原先我们手工控制事务的时候,通常这个事务的提交或回滚是由我们来操纵的,那现在我们采用容器的声明式事务管理,那我们如何知道事务什么时候提交,什么时候回滚呢?答案是:Spr

Spring 注解方式 实现 IOC 和 DI

注:以下所有测试案例(最后一个除外)的测试代码都是同一个: package cn.tedu.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.tedu.beans.Person; public class IOC

Spring 中使用XML配置方式和使用注解方式实现DI

Spring容器给我们提供了很好的环境,我们只关注主要业务即可,其他的无需关注太多.今天刚学的DI DI(Dependency Injection):依赖注入 使用XML配置文件完成依赖注入 1.1普通属性的注入 创建实体类: package cn.spring.entity; import java.io.Serializable; /** * Created by accp on 2017/3/23. */ public class User implements Serializable

4.Spring注解方式IOC的快速入门

1.导入jar包 2.创建对应的类 public interface HelloService { public void sayHello(); } /** * @Component(value="helloService") 相当于 <bean id="helloService" class="com.spring.demo1.HelloSeviceImpl"/> * @author NEWHOM * */ @Component(

Spring注解方式配置说明

1.<context:annotation-config/>与<context:component-scan base-package=”XX.XX”/> 在基于主机方式配置Spring的配置文件中,你可能会见到<context:annotation-config/>这样一条配置,他的作用是式地向 Spring 容器注册AutowiredAnnotationBeanPostProcessor.CommonAnnotationBeanPostProcessor.Persi