11/08/2018, 19:22

Inner Bean trong Spring

Previous Như bạn biết, các lớp bên trong Java được định nghĩa trong phạm vi của các lớp khác, tương tự, các inner Bean trong Spring là các bean được định nghĩa trong phạm vi của một bean khác. Do đó, một phần tử <bean/> bên trong <property/> hoặc <constructor-arg/& ...

Previous

Như bạn biết, các lớp bên trong Java được định nghĩa trong phạm vi của các lớp khác, tương tự, các inner Bean trong Spring là các bean được định nghĩa trong phạm vi của một bean khác. Do đó, một phần tử <bean/> bên trong <property/> hoặc <constructor-arg/> được gọi là inner bean, cho ví dụ:

<?xml version = "1.0" encoding = "UTF-8"?>

<beans xmlns = "http://www.springframework.org/schema/beans"
   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-3.0.xsd">

   <bean id = "outerBean" class = "...">
      <property name = "target">
         <bean id = "innerBean" class = "..."/>
      </property>
   </bean>

</beans>

Ví dụ Inner Bean trong Spring

Tạo một Java Maven project trong Eclipse.

Cấu trúc project:

Inner Bean trong Spring

Sau đó update file pom.xml để tải thư viện Spring như sau:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
  http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>vn.viettuts</groupId>
  <artifactId>SpringExample</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>SpringExample</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.6.RELEASE</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.6.RELEASE</version>
        </dependency>
  </dependencies>
</project>

Đây là nội dung của lớp TextEditor.java

package vn.viettuts.example;

public class TextEditor {
    private SpellChecker spellChecker;

    // inject dependency qua tham số của phương thức.
    public void setSpellChecker(SpellChecker spellChecker) {
        System.out.println("Set bo kiem tra chinh ta.");
        this.spellChecker = spellChecker;
    }

    public SpellChecker getSpellChecker() {
        return spellChecker;
    }

    public void spellCheck() {
        spellChecker.checkSpelling();
    }
}

Đây là nội dung của lớp SpellChecker.java

package vn.viettuts.example;

public class SpellChecker {
    public SpellChecker() {
        System.out.println("Khoi bo kiem tra chinh ta.");
    }

    public void checkSpelling() {
        System.out.println("Kiem tra chinh ta...");
    }
}

Đây là nội dung của lớp TextEditor.java

package vn.viettuts.example;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Hello world!
 *
 */
public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "Beans.xml");
        TextEditor te = (TextEditor) context.getBean("textEditor");
        te.spellCheck();
    }
}

Sau đây là tệp cấu hình Beans.xml có cấu hình cho phép dựa trên setter nhưng sử dụng inner Bean.

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" 
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-3.0.xsd">

     
    <bean id="textEditor" class="vn.viettuts.example.TextEditor">
        <property name="spellChecker">
            <bean id="spellChecker" class="vn.viettuts.example.SpellChecker" />
        </property>
    </bean>

</beans>

Kết quả:

Khoi doi tuong kiem tra chinh ta.
Set bo kiem tra chinh ta.
Kien tra chinh ta...

Ngoài ra, bạn cũng có thể dùng thuộc tính ref để tham chiến inner bean tới một bean khác như sau, cũng tương tự như định nghĩa trên:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" 
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-3.0.xsd">

    <bean id="SpellChecker" class="vn.viettuts.example.SpellChecker" />
    
    <bean id="textEditor" class="vn.viettuts.example.TextEditor">
        <property name="spellChecker" ref="SpellChecker" />
    </bean>

</beans>

Download Project

Previous
0