天天看點

spring的bean管理(注解方式)

<code>public</code> <code>interface</code> <code>UserDao {</code>

<code>    </code><code>public</code> <code>void</code> <code>sayHello();</code>

<code>}</code>

<code> </code> 

<code>@Component</code><code>(value=</code><code>"userDao"</code><code>)</code>

<code>    </code><code>public</code> <code>class</code> <code>UserDaoImpl </code><code>implements</code> <code>UserDao {</code>

<code>@Override</code>

<code>public</code> <code>void</code> <code>sayHello() {</code>

<code>    </code><code>System.out.println(</code><code>"Hello Spring Annotation..."</code><code>);</code>

Spring中提供@Component的三個衍生注解:(功能目前來講是一緻的)

* @Controller :WEB層

* @Service :業務層

* @Repository :持久層

這三個注解是為了讓标注類本身的用途清晰,Spring在後續版本會對其增強

@Value  :用于注入普通類型.

@Autowired :自動裝配:

* 預設按類型進行裝配.

* 按名稱注入:

* @Qualifier:強制使用名稱注入.

@Resource相當于:

* @Autowired和@Qualifier一起使用.

@Scope:

* singleton:單例

* prototype:多例

@PostConstruct :相當于init-method

@PreDestroy  :相當于destroy-method

    @PostConstruct說明

         被@PostConstruct修飾的方法會在伺服器加載Servlet的時候運作,并且隻會被伺服器調用一次,類似于Serclet的inti()方法。被@PostConstruct修飾的方法會在構造函數之後,init()方法之前運作。

    @PreConstruct說明

         被@PreConstruct修飾的方法會在伺服器解除安裝Servlet的時候運作,并且隻會被伺服器調用一次,類似于Servlet的destroy()方法。被@PreConstruct修飾的方法會在destroy()方法之後運作,在Servlet被徹底解除安裝之前。

XML和注解:

* XML :結構清晰.

* 注解 :開發友善.(屬性注入.)

實際開發中還有一種XML和注解整合開發:

* Bean有XML配置.但是使用的屬性使用注解注入

關于注解1:工作中有一次犯了一個很嚴重的問題:

關于注解2:想要兩個類使用同一個變量,而且兩個類有關系,通過注入方式建立兩個類的對象産生關系。但是如果想要共用一個對象,建立對象可以通過有參構造傳入(new A("xxx")),但是注解建立對象我不會傳參。但可以通過配置檔案和注解相結合使用。

第二張圖示範了properties檔案屬性的使用方法,在工作中,又遇見另外一種(在這裡示範)

首先,在spring的主配檔案中要配置:

<code>&lt;!-- 加載applicationConfig.properties檔案,擷取屬性檔案的内容 --&gt;</code>

<code>    </code><code>&lt;bean id=</code><code>"propertyConfigurer"</code> <code>class</code><code>=</code><code>"com.ad.utils.GlobalProperties"</code><code>&gt;</code>

<code>        </code><code>&lt;property name=</code><code>"ignoreResourceNotFound"</code> <code>value=</code><code>"true"</code> <code>/&gt;</code>

<code>        </code><code>&lt;property name=</code><code>"locations"</code><code>&gt;</code>

<code>            </code><code>&lt;list&gt;</code>

<code>                </code><code>&lt;value&gt;classpath:applicationConfig.properties&lt;/value&gt;</code>

<code>                </code><code>......</code>

<code>            </code><code>&lt;/list&gt;</code>

<code>        </code><code>&lt;/property&gt;</code>

<code>    </code><code>&lt;/bean&gt;</code>

然後寫出實作類:

<code>import</code> <code>java.util.HashMap;</code>

<code>import</code> <code>java.util.Map;</code>

<code>import</code> <code>java.util.Properties;</code>

<code>import</code> <code>org.springframework.beans.BeansException;</code>

<code>import</code> <code>org.springframework.beans.factory.config.ConfigurableListableBeanFactory;</code>

<code>import</code> <code>org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;</code>

<code>/**</code>

<code> </code><code>* 自定義PropertyPlaceholderConfigurer傳回properties内容</code>

<code> </code><code>* </code>

<code> </code><code>*/</code>

<code>public</code> <code>class</code> <code>GlobalProperties </code><code>extends</code> <code>PropertyPlaceholderConfigurer{</code>

<code>    </code><code>private</code> <code>static</code> <code>Map&lt;String, Object&gt; ctxPropertiesMap;</code>

<code>    </code><code>@Override</code>

<code>    </code><code>protected</code> <code>void</code> <code>processProperties(ConfigurableListableBeanFactory beanFactoryToProcess,Properties props) </code><code>throws</code> <code>BeansException {</code>

<code>        </code> 

<code>        </code><code>super</code><code>.processProperties(beanFactoryToProcess, props);</code>

<code>        </code><code>ctxPropertiesMap = </code><code>new</code> <code>HashMap&lt;String, Object&gt;();</code>

<code>        </code><code>for</code> <code>(Object key : props.keySet()) {</code>

<code>            </code><code>String keyStr = key.toString();</code>

<code>            </code><code>String value = props.getProperty(keyStr);</code>

<code>            </code><code>ctxPropertiesMap.put(keyStr, value);</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

<code>    </code><code>public</code> <code>static</code> <code>Object getContextProperty(String name) {</code>

<code>        </code><code>return</code> <code>ctxPropertiesMap.get(name);</code>

<code>    </code> 

<code>    </code><code>/**</code>

<code>     </code><code>* 擷取屬性值</code>

<code>     </code><code>* @param key</code>

<code>     </code><code>* @return</code>

<code>     </code><code>*/</code>

<code>    </code><code>public</code> <code>static</code> <code>String getProperties(String key){ </code>

<code>        </code><code>Object value = ctxPropertiesMap.get(key);</code>

<code>        </code><code>return</code> <code>value != </code><code>null</code> <code>? String.valueOf(value) : </code><code>""</code><code>;</code>

<code>     </code> 

<code>     </code><code>*擷取屬性值,傳回整形</code>

<code>    </code><code>public</code> <code>static</code> <code>Integer getInteger(String key){</code>

<code>        </code><code>return</code> <code>value != </code><code>null</code> <code>? Integer.valueOf(value.toString()) : </code><code>0</code><code>;</code>

最後是使用方法:

<code>GlobalProperties.getProperties(</code><code>"XXXXX"</code><code>).trim();</code>

補:spring的bean管理xml方式

    建立service類和dao類

    在service中得到dao對象

本文轉自 叫我北北 51CTO部落格,原文連結:http://blog.51cto.com/qinbin/2052625