Inhaltsverzeichnis
Vorher geschrieben:
Fall: @Component- und @Scope-Nutzungsanalyse:
Fall: @Autowired-Nutzungsanalyse eins:
Fall: @Autowired-Nutzungsanalyse zwei:
案例:@ImportResource和@Value用法分析:
案例:@Bean和@Scope用法分析:
Heim Java javaLernprogramm Detaillierte Erläuterung der Verwendungscodebeispiele von Spring-Framework-Anmerkungen

Detaillierte Erläuterung der Verwendungscodebeispiele von Spring-Framework-Anmerkungen

Mar 18, 2017 am 10:36 AM

Vorher geschrieben:

Wie wir alle wissen, wird im JavaEE-Entwicklungs- Framework das Spring-Framework am häufigsten verwendet, und die Positionierung von Anmerkungen im Framework wird immer häufiger offensichtlicher. Machen wir einen Witz: Wenn es mit einer Anmerkung gelöst werden kann, wird es nie mit einer Menge Konfiguration und Code gelöst; wenn es nicht gelöst werden kann, dann kommen Sie mit zwei Anmerkungen (Moment, nicht sprühen). ..)

1.@Component ist eine allgemeine Annotation, die von Spring definiert wird und jede Bean mit Annotationen versehen kann.

2. @Scope definiert den Geltungsbereich der Bean: „Singleton“. Darüber hinaus gibt es Prototyp, Anforderung, Sitzung.

Fall: @Component- und @Scope-Nutzungsanalyse:

BeanAnnotation-Klasse:

@Scope
@Component
public class BeanAnnotation {

    public void say(String arg) {
        System.out.println("BeanAnnotation : " + arg);
    }

    public void myHashCode() {
        System.out.println("BeanAnnotation : " + this.hashCode());
    }

}
Nach dem Login kopieren

junit4-Testklasse→TestBeanAnnotation-Klasse:

@RunWith(BlockJUnit4ClassRunner.class)
public class TestBeanAnnotation extends UnitTestBase {

    public TestBeanAnnotation() {
        super("classpath*:spring-beanannotation.xml");
    }

    @Test
    public void testSay() {
        BeanAnnotation bean = super.getBean("beanAnnotation");
        bean.say("This is test.");
    }

    @Test
    public void testScpoe() {
        BeanAnnotation bean = super.getBean("beanAnnotation");
        bean.myHashCode();
        bean = super.getBean("beanAnnotation");
        bean.myHashCode();
    }

}
Nach dem Login kopieren

SpringKonfigurationsdatei→spring-beanannotation.xml:

<context:component-scan base-package="com.beanannotation"></context:component-scan>
Nach dem Login kopieren
Nach dem Login kopieren

Lass uns zuerst die Spring-Konfigurationsdatei analysieren , base-package="com.beanannotation" gibt an, dass wir die Annotationen nur unter diesem Paketnamen verarbeiten.

Analysieren Sie dann die BeanAnnotation-Klasse und es gibt eine Say-Methode. Unter der Annahme, dass wir nicht wissen, um welche Art von Klasse es sich handelt (Anmerkung: Service oder DAO), können wir eine allgemeine Annotation @Component verwenden.

Analysieren Sie abschließend die TestBeanAnnotation-Klasse. In der testSay-Methode ruft super.getBean("beanAnnotation") die Bean aus dem IOC-Container ab und ruft die Say-Methode der Bean auf.

Es ist Zeit, eine Frage zu stellen. Wenn wir super.getBean verwenden, erhalten wir es aus dem IOC-Container über die ID der Bean. Denn wenn wir @Component zur BeanAnnotation-Klasse hinzufügen, lautet die Standard-ID beanAnnotation. Wenn der Name von @Component angegeben wird, beispielsweise als @Component(”bean”), wenn Unit-Test , muss die von super.getBean erhaltene ID damit übereinstimmen, damit der Test erfolgreich ist.

Hier trenne ich die @Scope-Annotation zur Analyse. Es gibt eine testScpoe-Methode in der TestBeanAnnotation-Klasse. Es gibt eine myHashCode-Methode in der BeanAnnotation-Klasse. Sie sind vielleicht etwas verwirrt, warum Sie this.hashCode () verwenden sollten. Da @Scope den Bereich der Bean angibt, wird der Hash-Codewert verwendet, um zu bestimmen, ob es sich um dasselbe Objekt handelt, um sicherzustellen, dass die Ergebnisse der Testklasse genau und klar sind.

3.@Repository, @Service und @Controller sind gezieltere Annotationen.

PS: Hier müssen wir verstehen, dass diese drei Annotationen auf den von @Component definierten Annotationen basieren:

①, @Repository wird normalerweise verwendet Kommentieren Sie DAO-Klassen, was wir oft als Persistenzschicht bezeichnen.
② @Service wird normalerweise zum Kommentieren der Service-Klasse verwendet, bei der es sich um die Service-Schicht handelt.
③. @Controller wird normalerweise in der Controller-Klasse verwendet, die die Kontrollschicht darstellt (MVC).

4. Unter @Autowired versteht man die „traditionelle“ Setter-Methode, die in Setter-Methoden, Konstruktoren oder Mitgliedsvariablen verwendet werden kann und die automatische Assemblierung von Spring Beans durchführen kann.

Fall: @Autowired-Nutzungsanalyse eins:

Spring-Konfigurationsdatei → spring-beanannotation.xml:

<context:component-scan base-package="com.beanannotation"></context:component-scan>
Nach dem Login kopieren
Nach dem Login kopieren

SimpleMovieListeer-Klasse:

public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Autowired(required=false)
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

}
Nach dem Login kopieren

Wenn keine passende Bean gefunden wird, schlägt die automatische Verdrahtung standardmäßig fehl wird eine Ausnahme auslösen , wir können @Autowired mit Anmerkungen versehen auf dieser Set-Methode und markieren Sie „required=false“, um dies zu vermeiden. Dies ist jedoch nicht erforderlich. Wenn die Instanz von movieFinder nicht gefunden wird, wird nur festgestellt, dass movieFinder null ist Stellen Sie mithilfe dieser Funktion zunächst fest, ob movieFinder null ist. Wenn dies der Fall ist, wird eine Nullzeigerausnahme gemeldet.

Es ist erwähnenswert, dass wir wissen, dass jede Klasse viele Konstruktoren haben kann, aber bei Verwendung von @Autowired gibt es und kann nur einen Konstruktor geben, der als erforderlich = wahr markiert werden kann (Hinweis: erforderlich Der Standardwert ist falsch).

Fall: @Autowired-Nutzungsanalyse zwei:

BeanImplOne-Klasse:

@Order
@Component
public class BeanImplOne implements BeanInterface {

}
Nach dem Login kopieren

BeanImplTwo-Klasse:

@Order
@Component
public class BeanImplTwo implements BeanInterface {

}
Nach dem Login kopieren

BeanInterface-Klasse:

public interface BeanInterface {

}
Nach dem Login kopieren

BeanInvoker-Klasse:

@Component
public class BeanInvoker {

    @Autowired
    private List<BeanInterface> list;

    @Autowired
    private Map<String, BeanInterface> map;

    public void say() {
        if (null != list && 0 != list.size()) {
            for (BeanInterface bean : list) {
                System.out.println(bean.getClass().getName());
            }
        } else {
            System.out.println(" list is null !");
        }

        if (null != map && 0 != map.size()) {
            for (Map.Entry<String, BeanInterface> entry : map.entrySet()) {
                System.out.println(entry.getKey() + "      " + entry.getValue().getClass().getName());
            }
        } else {
            System.out.println("map is null !");
        }
    }
}
Nach dem Login kopieren

Testklasse TestInjection:

@RunWith(BlockJUnit4ClassRunner.class)
public class TestInjection extends UnitTestBase {

    public TestInjection() {
        super("classpath:spring-beanannotation.xml");
    }

    @Test
    public void testMultiBean() {
        BeanInvoker invoker = super.getBean("beanInvoker");
        invoker.say();
    }

}
Nach dem Login kopieren

首先,我们清楚BeanImplOne类和BeanImplTwo类是实现了BeanInterface接口的,在BeanInvoker类里面我们定义了list和map,我们通过@Autowired注解把BeanImplOne类和BeanImplTwo类注解进入其中。那么怎么证实是@Autowired注解把这两个类注入到list或者map中的呢?那么请看if循环语句和foreach循环打印,通过这个逻辑判断,如果能够打印出BeanImplOne类和BeanImplTwo类的路径名,就说明这样是可以的。如果有些小伙伴可能不信,那么可以试着不使用@Autowired注解,看结果怎么样。

测试类没有什么好说的,各位小伙伴有没有注意到@Order注解呢?这里需要解释的就是,如果在@Order注解里面输入执行的数字,比如1或者2,那么打印出来的路径名就会按顺序,也就是说通过指定@Order注解的内容可以实现优先级的功能。

5.@ImportResource注解引入一个资源,对应一个xml文件

6.@Value注解从资源文件中,取出它的key并赋值给当前类的成员变量

案例:@ImportResource和@Value用法分析:

MyDriverManager类:

public class MyDriverManager {

    public MyDriverManager(String url, String userName, String password) {
        System.out.println("url : " + url);
        System.out.println("userName: " + userName);
        System.out.println("password: " + password);
    }

}
Nach dem Login kopieren

config.xml:

<context:property-placeholder location="classpath:/config.properties"/>
Nach dem Login kopieren

StoreConfig类:

@Configuration
@ImportResource("classpath:config.xml")
public class StoreConfig {

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Bean
    public MyDriverManager myDriverManager() {
        return new MyDriverManager(url, username, password);
    }
Nach dem Login kopieren

这个案例我们使用注解配置jdbc数据库的连接,首先创建一个内含构造器的MyDriverManager类,然后配置config.xml里面的资源文件路径,以便@ImportResource注解获取,最后配置StoreConfig类。(注意url、username、password也必须要和数据库的保持一致哦)

详解StoreConfig类:首先我们定义三个成员变量,然后给每一个成员变量打上一个@value注解,注意@value里面的内容一定是资源文件里面的key值。这里的@ImportResource注解就是指明一个资源文件,在这个资源文件里面获取到对应的数据。那么@Configuration注解是用来干嘛的呢?为什么不用@Component注解呢?其实是这样的,@Component注解用于将所标注的类加载到 Spring 环境中,这时候是需要配置component-scan才能使用的,而@Configuration注解是Spring 3.X后提供的注解,它用于取代XML来配置 Spring。

7.@Bean注解用来标识配置和初始化一个由SpringIOC容器管理的新对象的方法,类似XML中配置文件的

ps:默认的@Bean注解是单例的,那么有什么方式可以指定它的范围呢?所以这里才出现了@Scope注解

8.@Scope注解,在@Scope注解里面value的范围和Bean的作用域是通用的,proxyMode的属性是采用哪一种的单例方式(一种是基于接口的注解,一种是基于类的代理)

案例:@Bean和@Scope用法分析:

    @Bean
    @Scope(value ="session",proxyMode = "scopedProxyMode.TARGET_CLASS")
    public UserPreferences userPreferences(){
        return new userPreferences();
    }

    @Bean
    public service userService(){
        UserService service =new SimpleUserService();
        service.setUserPreferences(userPreferences);
        return service;
    }
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendungscodebeispiele von Spring-Framework-Anmerkungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Feb 01, 2024 pm 09:18 PM

Im Jahr 2023 ist die KI-Technologie zu einem heißen Thema geworden und hat enorme Auswirkungen auf verschiedene Branchen, insbesondere im Programmierbereich. Die Bedeutung der KI-Technologie wird den Menschen zunehmend bewusst, und die Spring-Community bildet da keine Ausnahme. Mit der kontinuierlichen Weiterentwicklung der GenAI-Technologie (General Artificial Intelligence) ist es entscheidend und dringend geworden, die Erstellung von Anwendungen mit KI-Funktionen zu vereinfachen. Vor diesem Hintergrund entstand „SpringAI“ mit dem Ziel, den Prozess der Entwicklung von KI-Funktionsanwendungen zu vereinfachen, ihn einfach und intuitiv zu gestalten und unnötige Komplexität zu vermeiden. Durch „SpringAI“ können Entwickler einfacher Anwendungen mit KI-Funktionen erstellen, wodurch diese einfacher zu verwenden und zu bedienen sind.

Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Apr 28, 2024 am 11:46 AM

Als Branchenführer bietet Spring+AI durch seine leistungsstarke, flexible API und erweiterte Funktionen führende Lösungen für verschiedene Branchen. In diesem Thema werden wir uns mit den Anwendungsbeispielen von Spring+AI in verschiedenen Bereichen befassen. Jeder Fall wird zeigen, wie Spring+AI spezifische Anforderungen erfüllt, Ziele erreicht und diese LESSONSLEARNED auf ein breiteres Anwendungsspektrum ausdehnt. Ich hoffe, dieses Thema kann Sie dazu inspirieren, die unendlichen Möglichkeiten von Spring+AI tiefer zu verstehen und zu nutzen. Das Spring-Framework hat eine mehr als 20-jährige Geschichte im Bereich der Softwareentwicklung, und seit der Veröffentlichung der Spring Boot 1.0-Version sind 10 Jahre vergangen. Nun kann niemand diesen Frühling bestreiten

Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Jan 08, 2024 am 10:23 AM

So implementieren Sie programmgesteuerte Spring-Transaktionen: 1. Verwenden Sie TransactionCallback und TransactionCallbackWithoutResult; 4. Verwenden Sie TransactionTemplate in Kombination mit @Transactional;

Wie werden Annotationen für Testmethoden im JUnit-Framework verwendet? Wie werden Annotationen für Testmethoden im JUnit-Framework verwendet? May 06, 2024 pm 05:33 PM

Anmerkungen im JUnit-Framework werden zum Deklarieren und Konfigurieren von Testmethoden verwendet. Zu den Hauptanmerkungen gehören: @Test (Deklaration von Testmethoden), @Before (Methodenausführung, bevor die Testmethode ausgeführt wird), @After (Methodenausführung, nachdem die Testmethode ausgeführt wird). ausgeführt wird), @ BeforeClass (Methode, die ausgeführt wird, bevor alle Testmethoden ausgeführt werden), @AfterClass (Methode, die ausgeführt wird, nachdem alle Testmethoden ausgeführt werden). Diese Anmerkungen helfen dabei, den Testcode zu organisieren und zu vereinfachen und die Zuverlässigkeit des Testcodes zu verbessern durch die Bereitstellung klarer Absichten und Konfigurationen.

Der König der PHP-Code-Dokumentation: Eine erweiterte Anleitung zu PHPDoc Der König der PHP-Code-Dokumentation: Eine erweiterte Anleitung zu PHPDoc Mar 02, 2024 am 08:43 AM

Einführung: PHPDoc ist ein Kommentarstandard für PHP-Code, der eine leicht verständliche und informative Dokumentation erstellt. Durch die Verwendung spezifischer Kommentar-Tags ermöglicht PHPDoc Entwicklern, wichtige Details zu Funktionen, Klassen, Methoden und anderen Codeelementen bereitzustellen. Dieser Leitfaden für Fortgeschrittene wirft einen detaillierten Blick auf PHPDoc, demonstriert seine Fähigkeiten und bietet effektive Dokumentationsstrategien. Syntax und Tags: PHPDoc-Kommentare beginnen mit doppelten Schrägstrichen (//) oder mehrzeiligen Kommentaren (/**/). Im Folgenden sind einige gängige Anmerkungs-Tags aufgeführt: @param: Definiert die Parameter einer Funktion oder Methode. @return: Gibt den Rückgabewert der Funktion oder Methode an. @throws: Beschreibt Ausnahmen, die von einer Funktion oder Methode ausgelöst werden können. @var: definiert die Attribute oder Instanzen der Klasse

Wie steuern Anmerkungen in der Jackson-Bibliothek die JSON-Serialisierung und -Deserialisierung? Wie steuern Anmerkungen in der Jackson-Bibliothek die JSON-Serialisierung und -Deserialisierung? May 06, 2024 pm 10:09 PM

Anmerkungen in der Jackson-Bibliothek steuern die JSON-Serialisierung und -Deserialisierung: Serialisierung: @JsonIgnore: Ignorieren Sie die Eigenschaft @JsonProperty: Geben Sie den Namen an @JsonGetter: Verwenden Sie die get-Methode @JsonSetter: Verwenden Sie die set-Methode Deserialisierung: @JsonIgnoreProperties: Ignorieren Sie die Eigenschaft @ JsonProperty: Geben Sie den Namen @JsonCreator an: Verwenden Sie den Konstruktor @JsonDeserialize: Benutzerdefinierte Logik

Detaillierte Erläuterung der Arbeitsschritte von MyBatis-Annotationen und dynamischem SQL Detaillierte Erläuterung der Arbeitsschritte von MyBatis-Annotationen und dynamischem SQL Feb 18, 2024 pm 03:29 PM

Detaillierte Einführung in die Verwendung von MyBatis Annotation Dynamic SQL MyBatis ist ein Persistenzschicht-Framework, das uns praktische Persistenzoperationen bietet. In der tatsächlichen Entwicklung ist es normalerweise erforderlich, SQL-Anweisungen basierend auf den Geschäftsanforderungen dynamisch zu generieren, um flexible Datenoperationen zu erreichen. MyBatis Annotation Dynamic SQL wurde entwickelt, um diesen Anforderungen gerecht zu werden.

So legen Sie die Transaktionsisolationsstufe im Frühjahr fest So legen Sie die Transaktionsisolationsstufe im Frühjahr fest Jan 26, 2024 pm 05:38 PM

So legen Sie die Transaktionsisolationsstufe in Spring fest: 1. Verwenden Sie die Annotation @Transactional. 3. Legen Sie sie in der Spring-Konfigurationsdatei fest. 4. Legen Sie sie in der Java-Konfigurationsklasse fest. Detaillierte Einführung: 1. Verwenden Sie die Annotation @Transactional, fügen Sie die Annotation @Transactional zu der Klasse oder Methode hinzu, die eine Transaktionsverwaltung erfordert, und legen Sie die Isolationsstufe im Attribut fest. 2. In der Spring-Konfigurationsdatei usw.

See all articles