<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><!-- 加載applicationConfig.properties檔案,擷取屬性檔案的内容 --></code>
<code> </code><code><bean id=</code><code>"propertyConfigurer"</code> <code>class</code><code>=</code><code>"com.ad.utils.GlobalProperties"</code><code>></code>
<code> </code><code><property name=</code><code>"ignoreResourceNotFound"</code> <code>value=</code><code>"true"</code> <code>/></code>
<code> </code><code><property name=</code><code>"locations"</code><code>></code>
<code> </code><code><list></code>
<code> </code><code><value>classpath:applicationConfig.properties</value></code>
<code> </code><code>......</code>
<code> </code><code></list></code>
<code> </code><code></property></code>
<code> </code><code></bean></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<String, Object> 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<String, Object>();</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