首先來(lái)個(gè)簡(jiǎn)單且古老的Java類吧
public class SpringBean {
public void say(){
System.out.println("這是一個(gè)SpringBean");
}
}
1、當(dāng)然了聋呢,第一種必須是我們最智能話的裝配方案拨齐,自動(dòng)裝配了。
在自動(dòng)裝配的時(shí)候颠猴,需要保證對(duì)類進(jìn)行注解操作。
@Component//一種通用的組件描述
@Controller//通常用于web中的控制器組件上
@Service//通常用于service服務(wù)組件上
@Repository//通常用于數(shù)據(jù)訪問(wèn)及操作組件
@Component//一種通用的組件描述
//@Controller//通常用于web中的控制器組件上
//@Service//通常用于service服務(wù)組件上
//@Repository//通常用于數(shù)據(jù)訪問(wèn)及操作組件
//一次只能使用一個(gè)喲小染,千萬(wàn)不要像我這樣進(jìn)行注解翘瓮,為了減少代碼量我才把他們放在了一起。
public class SpringBean {
public void say(){
System.out.println("這是一個(gè)SpringBean");
}
}
自動(dòng)裝配方案中如何在注解沒(méi)有明確指定名稱的話裤翩,則默認(rèn)bean的ID為類名且首字母自動(dòng)變成小寫字母资盅,如果指定了名稱的話則以指定的名稱作為bean的ID。
@Component("component")//一種通用的組件描述
//@Controller("controller")//通常用于web中的控制器組件上
//@Service("service")//通常用于service服務(wù)組件上
//@Repository("repository")//通常用于數(shù)據(jù)訪問(wèn)及操作組件
public class SpringBean {
public void say(){
System.out.println("這是一個(gè)SpringBean");
}
}
1.1 XML文件配置自動(dòng)裝配方案
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--啟用自動(dòng)掃描功能,掃描“cn.sharek.test”包下所有帶注解的POJO(Plain Old Java Object呵扛,簡(jiǎn)單且古老的Java對(duì)象)-->
<context:component-scan base-package="cn.sharek.test"/>
</beans>
1.2 JavaConfig配置自動(dòng)裝配方案
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration//表明該類是Spring的配置類
@ComponentScan("cn.sharek.test")//啟用自動(dòng)掃描功能每庆,掃描“cn.sharek.test”包下所有帶注解的POJO(Plain Old Java Object,簡(jiǎn)單且古老的Java對(duì)象
public class SpringRootConfig {
}
沒(méi)有看錯(cuò)今穿,通過(guò)Java代碼實(shí)現(xiàn)Spring的配置工作就是這么簡(jiǎn)單缤灵,但它并不是萬(wàn)能的,直到現(xiàn)在依然有部分的配置(Spring Web FLow....)無(wú)法通過(guò)Java代碼實(shí)現(xiàn)荣赶,必須借助于XML文件凤价。不要著急鸽斟,文章結(jié)尾會(huì)介紹一種混合配置拔创,XML中導(dǎo)入Java代碼的配置,Java代碼中導(dǎo)入XML的配置都是可以的富蓄。
2剩燥、通過(guò)XML文件,手動(dòng)編輯bean
接下來(lái)的是通過(guò)XML手動(dòng)編輯bean立倍,當(dāng)然了灭红,繼續(xù)使用前面那個(gè)用來(lái)被我們蹂躪的POJO。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--id指定bean的名稱口注,class指定是那個(gè)類-->
<bean id="springBean" class="SpringBean"/>
</beans>
現(xiàn)在:這個(gè)bean已經(jīng)可以使用了变擒。
如果這個(gè)bean沒(méi)有屬性需要設(shè)置或者注入,且沒(méi)有唯一的帶有參數(shù)的構(gòu)造方法的話那么這么做是正確的寝志。當(dāng)有唯一的帶參構(gòu)造方法娇斑,且沒(méi)有實(shí)現(xiàn)無(wú)參構(gòu)造方法的那么這么做絕對(duì)是一個(gè)錯(cuò)誤的選擇,這時(shí)候你需要為構(gòu)造參數(shù)設(shè)置屬性值或者注入屬性值材部。
看一看上面所描述的情況該如何去做:
public class SpringBean {
public SpringBean(String str) {
System.out.println("你設(shè)置了str:晾隆!乐导!它的值是:"+str);
}
public void say(){
System.out.println("這是一個(gè)SpringBean");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="springBean" class="SpringBean">
<constructor-arg value="一只二哈"/>
</bean>
</beans>
當(dāng)然了苦丁,我們?cè)谶@里不考慮那些多參數(shù)的情況,因?yàn)槲覀冊(cè)谶@是在將bean的裝配方案物臂,以后會(huì)將多參數(shù)的情況該如何去做的旺拉,不要著急。
3棵磷、通過(guò)JavaConfig類账阻,手動(dòng)編輯bean
我比較喜歡這種,通過(guò)類來(lái)管理類泽本。
@Configuration//表明該類是Spring的配置類
public class SpringRootConfig {
@Bean//很簡(jiǎn)單
public SpringBean springBean(){
return new SpringBean();
}
}
方法名就是bean的ID淘太,該變方法名稱就可改變bean的ID。當(dāng)然了也可已通過(guò)注解的name屬性來(lái)指定
@Configuration//表明該類是Spring的配置類
public class SpringRootConfig {
@Bean(name="happy")//很簡(jiǎn)單
public SpringBean springBean(){
return new SpringBean();
}
}
到此就該結(jié)束了。
No蒲牧,No撇贺,No
還有一件有趣的事情
當(dāng)然是混合配置了
在JavaConfig類中混入JavaConfig類
@Configuration//表明該類是Spring的配置類
@Import(ServiceConfig.class)//導(dǎo)入一個(gè)配置類
//@Import({ServiceConfig.class,ControllerConfig.class})//導(dǎo)入多個(gè)配置類
//@Import只能出現(xiàn)一次喲
public class SpringRootConfig {
}
在JavaConfig類中混入JavaConfig類及XMl文件
當(dāng)然了只混入XML文件也是可行的,這沒(méi)有錯(cuò)冰抢。
@Configuration//表明該類是Spring的配置類
@Import(ServiceConfig.class)//導(dǎo)入一個(gè)配置類
@ImportResource("classpath:application.xml")//導(dǎo)入一個(gè)XML配置文件
public class SpringRootConfig {
}
在XML文件中混入XMl文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="service.xml"/>
<import resource="controller.xml"/>
</beans>
在XML文件中JavaConfig
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--導(dǎo)入ServiceConfig-->
<bean class="ServiceConfig"/>
<!--導(dǎo)入ControllerConfig-->
<bean class="ControllerConfig"/>
</beans>
混合配置似乎看起來(lái)很好用松嘶,能夠?qū)⒁粋€(gè)文件按照功能,或者業(yè)務(wù)進(jìn)行拆分挎扰。但需要注意的是翠订,千萬(wàn)千萬(wàn)不能出現(xiàn)重復(fù)ID的bean。不然遵倦,Spring會(huì)不清楚你在使用哪一個(gè)bean尽超。