spring對bean的生命周期管理的比較精細,並不是單純的new()實例化.
1,找到class配置信息並將其實例化
2,受用依賴注入,按照配置信息,配置bean的所有屬性;
在一個開始使用前可以用配置初始化一些參數.
方法一:用注解@PostConstruct,也就是相當於init-method
package com.weitoo.server.task; import javax.annotation.PostConstruct; import javax.annotation.Resource; import org.springframework.stereotype.Component; import com.qianmi.open.api.DefaultOpenClient; import com.qianmi.open.api.OpenClient; import com.weitoo.server.mapper.PropertyMapper; /** * 授權和充值消息推送父類 * * @author 鍾政 暫時將這些字段值寫死 */ @Component public class BaseTask { @Resource private PropertyMapper propertyMapper; private static String API_URL = ""; protected static String APP_KEY = ""; protected static String APP_SECRET = ""; protected static String accessToken = ""; protected static String refreshToken = ""; // 創建一個客戶端,默認連接超時時間為3秒,請求超時時間為15秒。 protected static OpenClient client = new DefaultOpenClient(API_URL, APP_KEY, APP_SECRET); //方法二:是利用spring實例化和注入依賴后會執行的注解. @PostConstruct private void initMethod(){ if("".equals(accessToken)){ accessToken = propertyMapper.getValue("access_token").getData(); } if("".equals(refreshToken)){ refreshToken = propertyMapper.getValue("refresh_token").getData(); } if("".equals(APP_KEY)){ APP_KEY=propertyMapper.getValue("app_key").getData(); } if("".equals(APP_SECRET)){ APP_SECRET=propertyMapper.getValue("app_secret").getData(); } API_URL=propertyMapper.getValue("api_url").getData(); // client = new DefaultOpenClient(API_URL, APP_KEY, APP_SECRET); } }
上面的方式是通過數據庫配置一些初始化參數.
方法二:通過spring-config 直接配置.所配置的屬性必須有set方法
如果是想從maven中的pom.xml文件中獲取,需要中間文件*.properties文件.
如獲取pom屬性如下
<properties> <wxpay-scanpay-scancode-url>https://api.mch.weixin.qq.com/pay/unifiedorder</wxpay-scanpay-scancode-url> <wxpay-scanpay-pay-api-url>https://api.mch.weixin.qq.com/pay/micropay</wxpay-scanpay-pay-api-url> <wxpay-scanpay-pay-query-url>https://api.mch.weixin.qq.com/pay/orderquery</wxpay-scanpay-pay-query-url> <wxpay-scanpay-refund-url>https://api.mch.weixin.qq.com/secapi/pay/refund</wxpay-scanpay-refund-url> <wxpay-scanpay-refund-query-url>https://api.mch.weixin.qq.com/pay/refundquery</wxpay-scanpay-refund-query-url> <wxpay-scanpay-reverse-api-url>https://api.mch.weixin.qq.com/secapi/pay/reverse</wxpay-scanpay-reverse-api-url> <wxpay-scanpay-download-bill-url>https://api.mch.weixin.qq.com/pay/downloadbill</wxpay-scanpay-download-bill-url> <wxpay-scanpay-report-api-url>https://api.mch.weixin.qq.com/payitil/report</wxpay-scanpay-report-api-url> </properties>
*.properties的文件如下:wxpay.properties
scanpay.scancode.url=${wxpay-scanpay-scancode-url}
scanpay.pay.api.url=${wxpay-scanpay-pay-api-url}
scanpay.pay.query.url =${wxpay-scanpay-pay-query-url}
scanpay.refund.url=${wxpay-scanpay-refund-url}
scanpay.refund.query.url=${wxpay-scanpay-refund-query-url}
scanpay.reverse.api.url=${wxpay-scanpay-reverse-api-url}
scanpay.download.bill.url=${wxpay-scanpay-download-bill-url}
scanpay.report.api.url=${wxpay-scanpay-report-api-url}
在spring-config.xml關鍵配置如下:
<bean id="propertyConfigurer" class="com.weitoo.server.security.SecurityPropertyConfigurer"> <property name="locations"> <list> <!-- 微信支付初始化參數 --> <value>classpath:property/wxpay.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean>
其中com.weitoo.server.security.SecurityPropertyConfigurer類是繼承了org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.直接用PropertyPlaceholderConfigurer類也行.主要是解析properties文件
spring-config.xml 初始化類參數如下,ps:scope="singleton" 代表該類生命周期屬於spring管理.
<bean id="configure" class = "com.tencent.common.Configure" scope="singleton"> <property name="REFUND_API" value="${scanpay.refund.url}"/> <property name="REFUND_QUERY_API" value="${scanpay.refund.query.url}"/> <property name="REVERSE_API" value="${scanpay.reverse.api.url}"/> <property name="DOWNLOAD_BILL_API" value="${scanpay.download.bill.url}"/> <property name="REPORT_API" value="${scanpay.report.api.url}"/> </bean>