Spring BeanアセンブリJavaベースのコンテナ注記
4325 ワード
@Bean
SpringIOCコンテナ管理のある新しいオブジェクトを構成および初期化する方法で、XMLプロファイルと同様に、通常
以下のXML構成に相当
@ImportResource,@Value
そして、
注:ここでのユーザー名フィールドが
汎用ベースの自動アセンブリ
たとえば、次のインタフェースがあります.
では、
JSRサポート
JSR 250のサポート
1.@Resource注記変数またはメソッドがあり、name属性値があります.デフォルトの
2.@PostConstructおよび@PreDestroy
JSR 330のサポート
1.@Injectは
関連項目:慕課網:Spring入門編
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.username
、jdbc.password
などの属性名に接頭辞を付ける.汎用ベースの自動アセンブリ
たとえば、次のインタフェースがあります.
public interface Store {
}
IntegerStore
とStringStore
は彼の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();
}
s1
はStringStore
s2
に自動的に組み立てられ、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入門編