Heim  >  Artikel  >  Java  >  Detaillierte Einführung in die Annotationsfunktion in Java

Detaillierte Einführung in die Annotationsfunktion in Java

零下一度
零下一度Original
2017-06-30 11:18:541810Durchsuche

1. Beschreibung

hat die gleiche Funktion wie die @Component-Annotation, es gibt jedoch drei Annotationen mit unterschiedlichen Bedeutungen:

1) @Repository: Annotation zur Dao-Implementierungsklasse
2) @Service: Annotiert zur Service-Implementierungsklasse
3) @Controller: Annotiert zum SpringMVC-Prozessor

Bean-Bereich:
@Scope("prototype"): Wird zur Angabe der Objekterstellung verwendet Modus, kann Singleton-Modus oder Prototyp-Modus sein, der Standardwert ist Singleton

Grundlegende Typattributinjektion:
@Value

@Autowired: byType-Annotationsinjektion, dh basierend auf Typannotationen
@Qualifier("mySchool"): byName-Annotationsinjektion, muss in Verbindung mit @Autowired verwendet werden, wenn @Qualifier verwendet wird

Domain-Attribut-Annotation:
@Resource: Ohne die Namensattribut-Annotationsinjektion byType-Modus, aber die Voraussetzung ist, dass das injizierte Objekt nur eine
@Resource(name="mySchool") haben kann: Annotation-Injektion im byName-Modus

Das Leben der Bean:
@PostConstruct : Die aktuelle Bean wurde gerade initialisiert
@PreDestroy: Die aktuelle Bean wird gerade zerstört

@Configuration: Zeigt an, dass die aktuelle Klasse als Spring-Container fungiert, d. h. alle Beans werden erstellt von dieser Klasse

Hinweis:

Bevor Sie ein Beispiel geben, sollten mehrere Punkte angegeben werden:

1. Anmerkungen müssen vom spring-aop-4.3 abhängen. 9.RELEASE.jar Paket, daher müssen sie importiert werden Abhängigkeitspaket.

2. Mit Annotation injizieren, die Konfigurationsdatei muss hinzugefügt werden Constraint-Header-Datei:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"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/spring-beans.xsd
         http://www.springframework.org/schema/context/spring-context.xsd">

Sie können diese Header-Datei auch selbst in der Spring-Dokumentation finden:

 3. Wenn SpringJUnit4-Test verwendet wird, müssen Sie auch das Paket spring-test-4.3.9.RELEASE.jar importieren

2. Beispiel

1 Schulklasse:

package com.ietree.spring.basic.annotation.demo1;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;

@Component("mySchool")public class School {

    @Value(value = "清华大学")private String name;public School() {super();
    }public School(String name) {super();this.name = name;
    }public void setName(String name) {this.name = name;
    }

    @Overridepublic String toString() {return "School [name=" + name + "]";
    }
}

Schülerklasse erstellen:

package com.ietree.spring.basic.annotation.demo1;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import javax.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;/**
 * 说明:
 * 与@Component注解功能相同,但意义不同的注解还有三个:
 * 1)@Repository:注解在Dao实现类上
 * 2)@Service:注解在Service实现类上
 * 3)@Controller:注解在SpringMVC的处理器上
 * 
 * Bean作用域:
 * @Scope("prototype"):用于指定对象创建模式,可以是单例模式或者原型模式,默认是singleton
 * 
 * 基本类型属性注入:
 * @Value
 * 
 * @Autowired:byType方式的注解式注入,即根据类型注解
 * @Qualifier("mySchool"):byName方式的注解式注入,在使用@Qualifier时必须与@Autowired联合使用
 * 
 * 域属性注解:
 * @Resource:不加name属性则为byType方式的注解式注入,但前提是注入的对象只能有一个
 * @Resource(name="mySchool"):byName方式的注解式注入
 * 
 * Bean的生命始末:
 * @PostConstruct:当前Bean初始化刚完毕
 * @PreDestroy:当前Bean即将被销毁 *///@Scope("prototype")@Component("myStudent")public class Student {

    @Value(value = "小明")private String name;
    
    @Value(value = "25")private int age;    //    @Autowired//    @Qualifier("mySchool")//    @Resource(name="mySchool")    @Resourceprivate School school;// 对象属性,也叫做域属性public Student() {super();
    }    public Student(String name, int age) {super();this.name = name;this.age = age;
    }public void setName(String name) {
        System.out.println("执行setName()");this.name = name;
    }public void setAge(int age) {
        System.out.println("执行setAge()");this.age = age;
    }public void setSchool(School school) {this.school = school;
    }

    @Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", school=" + school + "]";
    }
    
    @PostConstructpublic void initAfter(){
        System.out.println("当前Bean初始化刚完毕");
    }
    
    @PreDestroypublic void preDestroy(){
        System.out.println("当前Bean即将被销毁");
    }
}

MyJavaConfig-Klasse erstellen:

package com.ietree.spring.basic.annotation.demo1;import org.springframework.beans.factory.annotation.Autowire;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/**
 * @Configuration:表示当前类充当Spring容器,即所有的Bean将由这个类来创建 */@Configurationpublic class MyJavaConfig {
    
    @Bean(name="mySchool")public School mySchoolCreator(){return new School("清华大学");
    }    // autowire=Autowire.BY_TYPE:指从当前类这个容器中查找与域属性的类型具有is-a关系的Bean// autowire=Autowire.BY_NAME:指从当前类这个容器中查找与域属性同名的Bean@Bean(name="myStudent", autowire=Autowire.BY_TYPE)public Student myStudentCreator(){return new Student("小明", 25);
    }
}

Konfigurationsdatei erstellen:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"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/spring-beans.xsd
         http://www.springframework.org/schema/context/spring-context.xsd">

Testklasse erstellen:

package com.ietree.spring.basic.annotation.demo1;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:com/ietree/spring/basic/annotation/demo1/applicationContext.xml")public class MyTest {
    
    @Autowiredprivate Student student;
    
    @Testpublic void test01() {

        String resource = "com/ietree/spring/basic/annotation/demo1/applicationContext.xml";
        ApplicationContext ctx = new ClassPathXmlApplicationContext(resource);

        School school = (School) ctx.getBean("mySchool");
        System.out.println(school);

        Student student = (Student) ctx.getBean("myStudent");
        System.out.println(student);
        
        ((ClassPathXmlApplicationContext)ctx).close();
    }    public void test02(){
        System.out.println(student);
    }
    
}

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Annotationsfunktion in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn