關(guān)于Spring-IoC的簡(jiǎn)單使用參考:
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、光山網(wǎng)絡(luò)推廣、重慶小程序開(kāi)發(fā)、光山網(wǎng)絡(luò)營(yíng)銷、光山企業(yè)策劃、光山品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供光山建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
spring ioc的簡(jiǎn)單實(shí)例及bean的作用域?qū)傩越馕?/strong>
1、通過(guò)set方法注入不同數(shù)據(jù)類型
測(cè)試類代碼(set方式注入的屬性一定要加set方法)
/**通過(guò)set方法注入示例*/ public class IoC_By_Set { /**注入Integer類型參數(shù)*/ private Integer id; /**注入String類型參數(shù)*/ private String name; /**注入實(shí)體Bean*/ private User user; /**注入數(shù)組*/ private Object[] array; /**注入List集合*/ private List
applicationContext.xml配置
array01 array02 array03
list01 list02 list03 set01 set02 set03 propValue1 propValue2
測(cè)試代碼
public class IoC_Test { private ApplicationContext ctx; @Before public void load() { //讀取applicationContext.xml配置文件 ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void SetTest() { IoC_By_Set ioc = (IoC_By_Set) ctx.getBean("ioC_By_Set"); ioc.checkAttr(); } }
控制臺(tái)結(jié)果:
id:1 -------------------------- name:P&G -------------------------- Bean:1|內(nèi)部Bean|233 -------------------------- array: array01 array02 array03 -------------------------- list: list01 list02 list03 -------------------------- set: set01 set02 set03 -------------------------- map: mapKey01|mapValue01 mapKey02|mapValue02 -------------------------- properties: propKey2|propValue2 propKey1|propValue1 -------------------------- -------------------------- -------------------------- 全部正確?。?!
2、通過(guò)構(gòu)造方法注入各種類型屬性
注意:使用JDK1.8版本請(qǐng)將spring相關(guān)jar包升級(jí)到4.x版本以上,否則不兼容構(gòu)造方法注入
測(cè)試類代碼
/** 通過(guò)構(gòu)造方法注入示例 */ public class IoC_By_Constructor { private Integer id; private String name; private User user; private Listlist; public IoC_By_Constructor() { } public IoC_By_Constructor(Integer id, String name, User user, List list) { this.id = id; this.name = name; this.user = user; this.list = list; } /**檢查是否注入成功*/ public Boolean checkAttr() { if(id == null) { return false; } else { System.out.println("id:" + id); } System.out.println("----------------------------"); if(name == null) { return false; } else { System.out.println("name:" + name); } System.out.println("----------------------------"); if(user == null) { return false; } else { System.out.println("user:" + user.getId() + "|" + user.getUserName() + "|" + user.getPassWord()); } System.out.println("----------------------------"); if(list == null) { return false; } else { System.out.println("list:"); for (Object object : list) { System.out.println(object.toString()); } } System.out.println("----------------------------"); System.out.println("全部正確?。?!"); return true; } }
applicationContext.xml配置
list01 list02 list03
測(cè)試代碼:
public class IoC_Test { private ApplicationContext ctx; @Before public void load() { //讀取applicationContext.xml配置文件 ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void constructorTest() { IoC_By_Constructor ioc = (IoC_By_Constructor) ctx.getBean("ioC_By_Constructor"); ioc.checkAttr(); } }
控制臺(tái)結(jié)果:
id:1 ---------------------------- name:P&G ---------------------------- user:1|構(gòu)造內(nèi)部Bean|666 ---------------------------- list: list01 list02 list03 ---------------------------- 全部正確?。。?/pre>
3、自動(dòng)注入(自動(dòng)裝配)
自動(dòng)裝配雖然能節(jié)省一些代碼但是不推薦使用
測(cè)試類代碼:
/**自動(dòng)裝配注入*/ public class IoC_By_Auto { private User user; /**檢查是否注入成功*/ public Boolean checkAttr() { if(user == null) { return false; } else { System.out.println("user:" + user.getId() + "|" + user.getUserName() + "|" + user.getPassWord()); } System.out.println("正確!?。?); return true; } /**自動(dòng)裝配的屬性需要設(shè)置set方法*/ public void setUser(User user) { this.user = user; } }
applicationContext.xml配置
測(cè)試代碼
public class IoC_Test { private ApplicationContext ctx; @Before public void load() { //讀取applicationContext.xml配置文件 ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void AutoTest() { IoC_By_Auto ioc = (IoC_By_Auto) ctx.getBean("ioC_By_Auto"); ioc.checkAttr(); } }
控制臺(tái)結(jié)果
user:1|自動(dòng)裝配|233 正確?。?!
以上使用的是byName模式,其他模式配置代碼已經(jīng)注明,不做測(cè)試。
4、使用P命名空間注入屬性
測(cè)試類代碼
/**使用P命名空間注入*/ public class IoC_By_P { private Integer id; private String name; private User user; /**檢查是否注入成功*/ public Boolean checkAttr() { if(id == null) { return false; } else { System.out.println("id:" + id); } System.out.println("----------------------------"); if(name == null) { return false; } else { System.out.println("name:" + name); } System.out.println("----------------------------"); if(user == null) { return false; } else { System.out.println("user:" + user.getId() + "|" + user.getUserName() + "|" + user.getPassWord()); } System.out.println("----------------------------"); System.out.println("全部正確?。?!"); return true; } //使用P命名空間注入屬性需要設(shè)置set方法 public void setId(Integer id) { this.id = id; } public void setName(String name) { this.name = name; } public void setUser(User user) { this.user = user; } }
applicationContext.xml配置
測(cè)試代碼
public class IoC_Test { private ApplicationContext ctx; @Before public void load() { //讀取applicationContext.xml配置文件 ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void PTest() { IoC_By_P ioc = (IoC_By_P) ctx.getBean("ioC_By_P"); ioc.checkAttr(); } }
控制臺(tái)結(jié)果
id:1 ---------------------------- name:命名空間 ---------------------------- user:1|P|233 ---------------------------- 全部正確?。?!
5、使用注解方式注入
Spring在3.0以后,提供了基于Annotation(注解)的注入。
1.@Autowired-對(duì)成員變量、方法和構(gòu)造函數(shù)進(jìn)行標(biāo)注,來(lái)完成自動(dòng)裝配的工作,不推薦使用
2.@Qualifier-配合@Autowired來(lái)解決裝配多個(gè)同類型的bean
3.@Resource-JSR-250標(biāo)準(zhǔn)注解,作用相當(dāng)于@Autowired,只不過(guò)@Autowired按byType自動(dòng)注入,而@Resource默認(rèn)按byName自動(dòng)注入
4.@PostConstruct-在方法上加上注解@PostConstruct,這個(gè)方法就會(huì)在Bean初始化之后被Spring容器執(zhí)行
5.@PreDestroy-在方法上加上注解@PreDestroy,這個(gè)方法就會(huì)在Bean初始化之后被Spring容器執(zhí)行
6.@Component-只需要在對(duì)應(yīng)的類上加上一個(gè)@Component注解,就將該類定義為一個(gè)Bean,不推薦使用,推薦使用更加細(xì)化的三種:@Repository、@Service、@Controller
@Repository存儲(chǔ)層Bean
@Service業(yè)務(wù)層Bean
@Controller展示層Bean
7.@Scope-定義Bean的作用范圍
首先配置applicationContext.xml開(kāi)啟注解
實(shí)體Bean加注解
@Repository public class User { private Integer id = 1; private String userName = "注解注入"; private String passWord = "233"; public User() { super(); } public User(Integer id, String userName, String passWord) { super(); this.id = id; this.userName = userName; this.passWord = passWord; } public Integer getId() { return id; } public String getUserName() { return userName; } public String getPassWord() { return passWord; } public void setId(Integer id) { this.id = id; } public void setUserName(String userName) { this.userName = userName; } public void setPassWord(String passWord) { this.passWord = passWord; } }
測(cè)試類代碼加注解
/**使用注解注入屬性*/ @Service("ioC_By_Annotation") public class IoC_By_Annotation { @Resource private User user; public void setUser(User user) { this.user = user; } /**檢查是否注入成功*/ public Boolean checkAttr() { if(user == null) { return false; } else { System.out.println("user:" + user.getId() + "|" + user.getUserName() + "|" + user.getPassWord()); } System.out.println("正確?。。?); return true; } }
測(cè)試代碼
public class IoC_Test { private ApplicationContext ctx; @Before public void load() { //讀取applicationContext.xml配置文件 ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void annotationTest() { IoC_By_Annotation ioc = (IoC_By_Annotation) ctx.getBean("ioC_By_Annotation"); ioc.checkAttr(); } }
控制臺(tái)輸出
經(jīng)測(cè)試使用注解注入如果applicationContext.xml配置有其他注入方式會(huì)報(bào)錯(cuò),也會(huì)導(dǎo)致其他注入方式異常。
user:1|注解注入|233 正確?。。?/pre>
6、通過(guò)配置靜態(tài)工廠方法Bean注入
靜態(tài)工廠代碼
/**靜態(tài)工廠*/ public class StaticFactory { public static Integer getId() { return 1; } public static String getName() { return "靜態(tài)工廠"; } public static User getUser() { return new User(1, "工廠User", "666"); } }
測(cè)試類代碼
/** 通過(guò)靜態(tài)工廠方式注入 */ public class IoC_By_StaticFactory { private Integer id; private String name; private User user; /** 檢查是否注入成功 */ public Boolean checkAttr() { if (id == null) { return false; } else { System.out.println("id:" + id); } System.out.println("----------------------------"); if (name == null) { return false; } else { System.out.println("name:" + name); } System.out.println("----------------------------"); if (user == null) { return false; } else { System.out.println("user:" + user.getId() + "|" + user.getUserName() + "|" + user.getPassWord()); } System.out.println("----------------------------"); System.out.println("全部正確?。?!"); return true; } /**需要為需要注入的屬性設(shè)置set方法*/ public void setId(Integer id) { this.id = id; } public void setName(String name) { this.name = name; } public void setUser(User user) { this.user = user; } }
applicationContext.xml配置
測(cè)試代碼
public class IoC_Test { private ApplicationContext ctx; @Before public void load() { //讀取applicationContext.xml配置文件 ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void staticFactoryTest() { IoC_By_StaticFactory ioc = (IoC_By_StaticFactory) ctx.getBean("ioC_By_StaticFactory"); ioc.checkAttr(); } }
控制臺(tái)輸出結(jié)果
id:1 ---------------------------- name:靜態(tài)工廠 ---------------------------- user:1|工廠User|666 ---------------------------- 全部正確?。。?/pre>
7、通過(guò)實(shí)例工廠方法注入
與靜態(tài)工廠區(qū)別在于實(shí)例工廠不是靜態(tài)的,需要先new 一個(gè)實(shí)例工廠對(duì)象,才可以配置其方法,而new 的這個(gè)對(duì)象也由spring來(lái)管理
工廠代碼
/**實(shí)例工廠*/ public class Factory { public Integer getId() { return 1; } public String getName() { return "實(shí)例工廠"; } public User getUser() { return new User(1, "實(shí)例工廠User", "233"); } }
測(cè)試類代碼
/**實(shí)例工廠注入*/ public class IoC_By_Factory { private Integer id; private String name; private User user; /** 檢查是否注入成功 */ public Boolean checkAttr() { if (id == null) { return false; } else { System.out.println("id:" + id); } System.out.println("----------------------------"); if (name == null) { return false; } else { System.out.println("name:" + name); } System.out.println("----------------------------"); if (user == null) { return false; } else { System.out.println("user:" + user.getId() + "|" + user.getUserName() + "|" + user.getPassWord()); } System.out.println("----------------------------"); System.out.println("全部正確?。?!"); return true; } /**需要為需要注入的屬性設(shè)置set方法*/ public void setId(Integer id) { this.id = id; } public void setName(String name) { this.name = name; } public void setUser(User user) { this.user = user; } }
applicationContext.xml配置
測(cè)試類代碼
public class IoC_Test { private ApplicationContext ctx; @Before public void load() { //讀取applicationContext.xml配置文件 ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void factoryTest() { IoC_By_Factory ioc = (IoC_By_Factory) ctx.getBean("ioC_By_Factory"); ioc.checkAttr(); } }
控制臺(tái)輸出
id:1 ---------------------------- name:實(shí)例工廠 ---------------------------- user:1|實(shí)例工廠User|233 ---------------------------- 全部正確!?。?/pre>
總結(jié)
以上就是本文關(guān)于淺談spring ioc的注入方式及注入不同的數(shù)據(jù)類型的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!