1. 程式人生 > >Spring的配置分別是xml和java style

Spring的配置分別是xml和java style

# Spring-IoC
Spring配置有兩種方式xml和java style


## Spring
· spring的IoC(控制反轉)就是一個工廠模式變種,<br/>
· spring核心就是IoC容器,實現這個容器的介面BeanFactory,BeanFactory是最核心的、最純粹的<br/>
方法: <br/>
getBean() <br/>
實現類: <br/>
ApplicationContext <br/>


· 簡單工廠

public class ServiceFactory() {
public Object getServiceObject(String name) {

if("bs".equals(name)) {
A a = new A();
B b = new b();
MyBatiscConnection conn = new MyBatiscConnection();
BookService bookservice = new BookService();

//同通過setter的方式來確定他們的關係是如何的
//B物件包含A物件
b.setA(a);
//MyBatiscConnection物件包B物件
conn.setB(b);
//**********__``````````__**********
bookService.setConn(conn);
log.setConn(conn);
bookservice.setLogger(log);
return bookService;

}
}

}



<li> 在呼叫的時候就變得了簡單了</li>

public class Test () {

public static void main(String[] arge) {
ServiceFactory sf = new ServiceFactory();

BookService bookservice = sf.getSerivceObject("bs");
//然後在呼叫bookservice的某個方法
}
}
<li> 小結:</li>

我們在中間加了一層,雖然不用在呼叫的時候,建立很多的物件。但在工廠模式中程式碼類增加了,
我們在維護的時變得困難了。

<li> 所以後面出現了:XML檔案的形式來更清晰的描述,類的建立和類與類之間的關係</li>

<!--之前是命令的形式,xml是描述的形式 -->
<xml>
<bean id="a" class="com.wgc.entity.A">
</bean>
<bean id="b" class="com.wgc.entity.B">
<property name="a" ref="a"/>
</bean>
<bean id="conn" class="org...MyBatiscConntion">
<property name="b" ref="b"/>
</bean>
<bean id="log" class="org...LogUitl">
<property name="conn" ref="conn"/>
</bean>
<bean id="bookService" class="com...BookService">
<property name="conn" ref="conn"/>
<property name="log" ref="log"/>
</bean>
</xml>


<li> 結論</li>
使用xml的檔案中Bean標籤配置,更加清晰的描述出類與類之間的關係。

<li>門面模式:</li>
例子:有一個工廠有很多的部門,要買東西的時候我們不可能一個一個部門去賣,所以把所以部門組合在一起,在去賣。


spring有三種方式描述
1、@Bean java類方法<br/>
2、<bean> xml<br/>
3、開啟掃描的模式
@Component <br/>
@ComponentScan(basePackages="learning.spring") <br/>
@ImportResource(locations = "learning/spring/my-spring.xml") <br/>
@Service <br/>
@Controller: 這個註解@ControllerAdvice只作用在加上@Controller的類上<br/>
@Repository <br/>

4、是java程式碼寫spring的配置

要在類的頭部加上@Configuration註解
@Configuration
如果要在java類上加這個註解就是相當xml檔案中<beans>


工廠模式與IoC的區別:

工廠模式在呼叫時才建立物件;<br/>
IoC容器在啟動就建立了所有的物件(可以加屬性lazy-init="true":意思是這個物件沒有那麼重要不著急建立),
還有所有的物件在剛剛開始都是單例模式建立了(可以加scope="prototype"修改:一般我們不會這麼做,因為每次都建立一個新的物件,對記憶體的消耗是非常大的)


denpend-on 定義順序(屬性)
parent 定義繼承(屬性)
scope 定義初始化策略(屬性)
lazy 延遲初始化 (屬性lazy-init)
alias 定義別名(標籤)
import 引入其他的定義檔案(標籤)


例子: <import resource="檔名"/>
<alias name="rabbits" alias="ADO"/>
或是<alias name="ADO" alias="rabbits"/>