Spring(三、Spring Bean自動組立と注記注入)

15664 ワード

1.XMLでの自動アセンブリ実装クラス
public class Person {
public void write(){
    System.out.println("     ");
}
}
public class Student {
    private int id;
    private String name;
    private Person person;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Person getPerson() {
        return person;
    }
    public void setPerson(Person person) {
        this.person = person;
    }


}

プロファイル
<bean id="person" class="com.iotek.bean.Person">bean>
    <bean id="stu" class="com.iotek.bean.Student" autowire="byName">bean>

テストクラス
public class Demo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
   ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
   Student stu=context.getBean("stu",Student.class);
   stu.getPerson().write();
   }

SpringコンテナはBeanを自動的にアセンブリします.必要な参考はbeanのautowireプロパティです.自動アセンブリには3つの方法があります:(1)名前に基づいて自動的にアセンブリ(byName).springコンテナのBeanの名前が一意であるため、曖昧さは生じません.この方法を推奨します.(2)タイプに応じて自動的にアセンブリします.(byType).Springコンテナに注入するbeanと同じタイプのBeanが複数見つかる可能性があるので曖昧になりますが、SpringコンテナはどのBeanを注入するか分からないので、異常を投げ出すことになります.(3)コンストラクタによる自動アセンブリ(constructor).詳細(3):a)アセンブリbeanの構造方法に対応するID、ない場合は、プロファイルに手動でアセンブリします.
  <bean id="stu" class="com.iotek.bean.Student" autowire="constructor">
      <constructor-arg name="card" ref="card"> constructor-arg>
      <constructor-arg name="name" value="aaa">constructor-arg>
    bean>

2.注釈を使用する自動アセンブリを実現する(1)注釈形式でbeanをアセンブリするが、構成ファイルでbeanを構成する(2)Springを使用しない場合、デフォルトでは注釈を閉じるi.注釈iiをオンにする必要がある.ヘッダーにcontextの情報を追加する

<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.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd">

iii.オン
<context:annotation-config>context:annotation-config>

iv.@Autowired::::注釈の使用(setメソッドを書かなくても)
    @Autowired
    private Person person;

自動検出bean
<context:component-scan base-package="com.iotek.bean">context:component-scan>

パッケージ内のオブジェクトに対してBeanを自動的に生成します:[各クラスに追加:@Component("bean Idを表す")]
@Component("student")
public class Student {

完全なコードの例:最初のステップ:プロファイル内で構成

<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.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd">
   
    <context:annotation-config>context:annotation-config>
    <context:component-scan base-package="com.iotek.bean">context:component-scan>  
    beans>

ステップ2:クラスの作成
//     xml    
  "person" class="com.iotek.bean.Person">
@Component("person")
public class Person {
public void write(){
    System.out.println("     ");
}
}

ステップ3:テストクラスの作成
public class Demo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
   ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
   Person person=context.getBean("person", Person.class);
   person.write();
    }
}

Bean管理でよく使われる注釈第1部注釈:クラスオブジェクトを生成するための注釈機能@Component生成クラスオブジェクト@Repository Dao実装クラスを注釈するために使用@Service実装クラスを注釈するために使用@Controller実装クラスを注釈するために使用@Controller実装クラスを注釈するために使用される4つの注釈の機能は同じであり、いずれもクラスを生成するために使用されるオブジェクトである.クラスで使用可能
@Controller(value="person")
public class Person{

}

第2部注釈:注入の操作をして、クラスのオブジェクトを別のクラスに注入して、このような中で注入するオブジェクトがあるクラスを宣言して、1つの属性として、setの方法で@Autowriedを使って自動注入(自動組み立て)を行って、クラスのオブジェクト名によって、クラスのオブジェクトを探し当てます
@Autowried
private Person person;

@Resource(name="値")を使用して、どのオブジェクト注入を指定するかを実装します.
    @Resource(name="person")
    private Person person;

例:最初のステップ:エンティティークラスの作成
import org.springframework.stereotype.Component;

@Component("person")
public class Person {
public void write(){
    System.out.println("     ");
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("student")
public class Student {
@Resource(name="person")
    private Person person;

public void read(){
    person.write();
}
}


ステップ2:プロファイル内で構成

<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.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd">
   
    <context:annotation-config>context:annotation-config>
    <context:component-scan base-package="com.iotek.bean">context:component-scan>  
beans>

ステップ3:テストクラスの作成
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.iotek.bean.Person;
import com.iotek.bean.Student;

public class Demo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
   ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
   Student stu=context.getBean("student",Student.class);
   stu.read();
    }

}