Spring BeanアセンブリJavaベースのコンテナ注記

4325 ワード

@Bean
SpringIOCコンテナ管理のある新しいオブジェクトを構成および初期化する方法で、XMLプロファイルと同様に、通常@Configurationと組み合わせて使用されます.
@Configuration
public class StoreConfig {

    @Bean(name = "store",initMethod = "init",destroyMethod="destroy")
    public BeanStore beanStore(){
        return new BeanStore();
    }
}

以下のXML構成に相当


    

@Beanに名前が指定されていない場合は、デフォルトでメソッド名(beanStore)です.範囲、すなわちXML構成時の属性scopeを指定する必要がある場合は、@Scop eで注釈することができ、@Scope注釈のproxyMode属性を構成してエージェント方式、すなわちXML構成時のscope-proxy属性を構成することができる
@Scope(value="prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)

@ImportResource,@Value @ImportResourceによってリソースファイルがロードされ、@Valueによって属性値が取得される.例えば、ファイルconfig.propertiesの内容は以下の通りである.
jdbc.username=root
password=root
url=127.0.0.1
config.xmlのようなXMLファイルに設定できます.



    



そして、beanを定義すると、@ImportResourceによりファイルがロードされ、@Valueにより属性の値が取得される
@Configuration
@ImportResource("classpath:config.xml")
public class StoreConfig {

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

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

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

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

注:ここでのユーザー名フィールドがusernameである場合、ファイル内の属性値ではなく、現在のシステムのユーザー名が得られるため、一般的にはjdbc.usernamejdbc.passwordなどの属性名に接頭辞を付ける.
汎用ベースの自動アセンブリ
たとえば、次のインタフェースがあります.
public interface Store {
}
IntegerStoreStringStoreは彼の2つの実装クラスです.
public class IntegerStore implements Store {
}
public class StringStore implements Store {
}

では、beanを定義する際には、次のようにすることができる.
@Autowired
private Store s1;

@Autowired
private Store s2;

@Bean
public StringStore stringStore() {
    return new StringStore();
}

@Bean
public IntegerStore integerStore() {
    return new IntegerStore();
}
s1StringStores2に自動的に組み立てられ、IntegerStoreになります.
JSRサポート
JSR 250のサポート
1.@Resource注記変数またはメソッドがあり、name属性値があります.デフォルトのSpringは、bea nが注入された名前に変更されたと解釈します.nameが指定されていない場合、名前はメソッド名または属性名から導出されます.
@Service
public class JsrServie {
    
    @Resource
    private JsrDAO jsrDAO;
    
    @Resource
    public void setJsrDAO(@Named("jsrDAO") JsrDAO jsrDAO) {
        this.jsrDAO = jsrDAO;
    }
}

2.@PostConstructおよび@PreDestroy @PostConstruct、初期化、init-Methodプロパティ@PreDestroy、破棄、destroy-Methodプロパティ
@PostConstruct
public void init() {
}

@PreDestroy
public void destroy() {
}

JSR 330のサポートjavax.injetパッケージに依存する必要があります
1.@Injectは@Autowiredと同等で、クラス、属性、メソッド、コンストラクタ2.@Nameは@Componentと同等の特定の名前で依存注入を行う
@Named
public class JsrServie {
    
    @Inject
    private JsrDAO jsrDAO;
    
    @Inject
    public void setJsrDAO(@Named("jsrDAO") JsrDAO jsrDAO) {
        this.jsrDAO = jsrDAO;
    }
}

関連項目:慕課網:Spring入門編