日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring项目属性注入和bean管理xml 注入一般属性和集合属性

發(fā)布時間:2024/9/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring项目属性注入和bean管理xml 注入一般属性和集合属性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

IOC

介紹:
在Spring的應(yīng)用中,Spring IoC容器可以創(chuàng)建、裝配和配置應(yīng)用組件對象,這里的組件對象稱為Bean。

Bean的實例化

在面向?qū)ο缶幊讨?#xff0c;想使用某個對象時,需要事先實例化該對象。同樣,在Spring框架中,想使用Spring容器中的Bean,也需要實例化Bean。Spring框架實例化Bean有3種方式:構(gòu)造方法實例化、靜態(tài)工廠實例化和實例工廠實例化,其中,最常用的實例方法是構(gòu)造方法實例化。
創(chuàng)建配置類
在應(yīng)用的src目錄下,創(chuàng)建config包,并在該包中創(chuàng)建配置類JavaConfig。在該配置類中使用@Bean定義3個Bean,具體代碼如下:

IOC操作bean管理(普通bean)

spring有兩種類型bean,一種普通bean,另外一種工廠bean
普通bean:在配置文件中定義的什么類型就返回什么類型,工廠bean:返回的類型可以不是定義的類型
目前創(chuàng)建項目后文件目錄:

導入的jar包五個:

這次下載的是5.2.6版本,用到了四個spring的jar包,是ioc需要的至少四個,直接jar包復制后新建lib文件夾,再粘貼到目錄下,再手動添加jar包:

spring的官網(wǎng)地址:
https://repo.spring.io/release/org/springframework/spring/

common-logging-1.1.jar的下載地址:
https://mvnrepository.com/artifact/commons-logging/commons-logging/1.1

各個類中的代碼:
Emp.java:

package com.company.bean;public class Emp {private String ename;private String gender; //員工屬于某個部門private Dept dept;public void setDept(Dept dept) {this.dept = dept;}public void setEname(String ename) {this.ename = ename;}public void setGender(String gender) {this.gender = gender;} //一個用于測試的方法public void testt(){System.out.println(ename+" 性別"+gender+" "+dept);}public Dept getDept() {return dept;} }

Dept.java:

package com.company.bean;public class Dept {private String dname;public void setDname(String dname) {this.dname = dname;}@Overridepublic String toString() {return"部門是:" + dname + '\'';}public String getDname(){return dname;} }

Userservice.java:

package com.company.service;import com.company.dao.UserDao; import com.company.dao.UserDaoimp;public class Userservice {//創(chuàng)建userdao類屬性private UserDao userdao;public void setUserdao(UserDao userdao) {this.userdao = userdao;}public void add(){System.out.println("servicee add..");userdao.update();}public void setUserDao(UserDaoimp userDao) {this.userdao=userDao;} }

Testdemo.java:

package com.company.spring5.testdemo;import com.company.bean.Emp; import com.company.service.Userservice; import com.company.spring5.User; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class Testdemo {@Testpublic void testAdd(){ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");Userservice userservice = context.getBean("userservice", Userservice.class);userservice.add();}@Testpublic void testbean2(){ApplicationContext context = new ClassPathXmlApplicationContext("bean3.xml");Emp emp=context.getBean("emp",Emp.class);emp.testt();}@Testpublic void testbean3(){ApplicationContext context=new ClassPathXmlApplicationContext("bean4.xml");Emp emp=context.getBean("emp",Emp.class);emp.testt();}}

bean2.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" xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd"> <bean id = "userservice" class="com.company.service.Userservice"> <!-- 注入userdao對象,name屬性:類里面屬性名稱--> <!-- ref屬性:創(chuàng)建userdao對象bean標簽的id值--><property name="UserDao" ref="userdaoimp"></property> </bean><bean id = "userdaoimp" class="com.company.dao.UserDaoimp"></bean></beans>

UserDaoimp.java:

package com.company.dao;public class UserDaoimp implements UserDao{@Overridepublic void update() {System.out.println("overider update");} }

內(nèi)部bean(嵌套寫法)和級聯(lián)賦值

第一種寫法。內(nèi)部bean
bean3.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"> <!--內(nèi)部bean--><bean id="emp" class="com.company.bean.Emp"><property name="ename" value="lucy"></property><property name="dept"><bean id="dept" class="com.company.bean.Dept"><property name="dname" value="財務(wù)部"></property> <!-- 嵌套寫法,在一個bean中嵌套另一個bean--></bean></property><property name="gender" value=""></property></bean> </beans>

注入屬性–級聯(lián)賦值

<bean id="emp" class="com.company.bean.Emp"><property name="ename" value="lucy"></property><property name="dept" ref="dept"></property><property name="gender" value=""></property> <!-- 級聯(lián)賦值:通過外部bean的方式引入,給屬性賦值--></bean><bean id="dept" class="com.company.bean.Dept"><property name="dname" value="人事部"></property></bean>

結(jié)果:

級聯(lián)賦值的第二種寫法。直接在屬性中注入:
bean4.xml:

<bean id="emp" class="com.company.bean.Emp"><property name="ename" value="lucy"></property><property name="dept" ref="dept"></property><property name="dept.dname" value="人事部門之deptname"></property> <!--這種方法注入屬性需要在Ept類中實現(xiàn)對Dept使用getter方法才可以使用--><property name="gender" value=""></property> </bean><bean id="dept" class="com.company.bean.Dept"><property name="dname" value="Caiwu"></property></bean>

且在Emp中加上:

public Dept getDept() {return dept;}

結(jié)果:

xml注入集合屬性

1.注入數(shù)組類型

2.注入list集合類型

3.注入map類型屬性

創(chuàng)建類,定義不同類型的屬性

現(xiàn)在的目錄:

Testdemo1.Java

package testdemo;import collection.Stu; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class Testdemo1 {@Testpublic void testvalue(){ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");Stu stu= context.getBean("stu", Stu.class);stu.ontest();} }

Stu.java:

package collection;import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set;public class Stu {private String[] lesson;//屬性 課程(有多門課程)public void setLesson(String[] lesson){this.lesson=lesson;}private List<String> newlist;//list類型的屬性private Map<String,String> newmap;//Map類型的屬性private Set<String>newset;public void setNewlist(List<String> newlist) {this.newlist = newlist;//setter方法}public void setNewset(Set<String> newset) {this.newset = newset;}public void setNewmap(Map<String, String> newmap) {this.newmap = newmap;}public void ontest(){System.out.println(Arrays.toString(lesson));System.out.println(newlist);System.out.println(newmap);System.out.println(newset);} }

bean1.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"> <bean id="stu" class="collection.Stu"><property name="lesson" ><array><value>語文</value><value>數(shù)學</value><value>english</value></array></property><property name="newlist"><list><value>list1</value><value>list2</value><value>list3</value></list></property><property name="newmap"><map><entry key="張三" value="第一名"></entry><entry key="李四" value="第二名"></entry><entry key="王五" value="第三名"></entry></map></property><property name="newset"><set><value>c語言</value><value>Java</value><value>html</value><value>css</value></set></property> </bean> </beans>

結(jié)果:

IOC操作工廠bean

第一步:創(chuàng)建類,讓這個類作為工廠bean,實現(xiàn)接口factorybean
第二步:實現(xiàn)接口里面的方法,在實現(xiàn)的方法中定義返回的bean類型
先創(chuàng)建一個類:

package factorybean;public class Mybean {@Overridepublic String toString() {return "Mybean{}";} }

bean2.xml進行配置:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:util="http://www.springframework.org/schema/util"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="mybook" class="factorybean.Mybean"></bean> </beans>

測試類:

@Testpublic void test2(){ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");Mybean mybook = context.getBean("mybook", Mybean.class);System.out.println(mybook);}

結(jié)果:

工廠bean設(shè)置返回的bean:

public class Mybean implements FactoryBean<Dept> {@Override//定義返回的beanpublic Dept getObject() throws Exception {Dept dept = new Dept();dept.setDname("財務(wù)");return dept;}

測試類:

@Testpublic void test2(){ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");Dept dept = context.getBean("mybook", Dept.class);System.out.println(dept);}

注意這句話 Dept dept = context.getBean(“mybook”, Dept.class);中的"mybook"跟

<bean id="mybook" class="factorybean.Mybean"> </bean>

中的id是對應(yīng)的關(guān)系,否則會報錯。
Dept類:

package com.company.bean;public class Dept {private String dname;public void setDname(String dname) {this.dname = dname;}@Overridepublic String toString() {return"部門是:" + dname + '\'';}public String getDname(){return dname;} }

bean作用域

在spring里面,默認情況下是單實例對象
可以測試:

@Testpublic void testvalue(){ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");Stu stu= context.getBean("stu", Stu.class);Stu stu2 = context.getBean("stu",Stu.class);stu.ontest();stu2.ontest();}

運行后:

可以發(fā)現(xiàn)輸出的內(nèi)容是相同的,如果沒有tostring方法,輸出的地址是相同的,也可以證明是單實例
singleton單實例 prototype多實例

<bean id="stu" class="collection.Stu" scope="prototype">

設(shè)置為多實例對象

bean生命周期

(1)通過構(gòu)造器創(chuàng)建bean實例(無參數(shù)構(gòu)造),
(2)為bean的屬性設(shè)置值和對其他bean的引用(調(diào)用set方法)
(3)調(diào)用bean的初始化方法(需要進行配置)
(4)bean可以使用了(對象獲取到了0
(5)當容器關(guān)閉的時候,調(diào)用bean的銷毀方法
代碼: 在bean包下創(chuàng)建類:

package com.company.bean;import org.w3c.dom.ls.LSOutput;public class Orders {public Orders() {System.out.println("第一步創(chuàng)建對象");}private String oname;public void setOname(String oname) {this.oname = oname;System.out.println("第二步調(diào)用set方法設(shè)置屬性值");;}public void initmethod(){System.out.println("執(zhí)行初始化");}public void destroymethod(){System.out.println("執(zhí)行銷毀");} }

bean3.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"> <bean id="orders" class="com.company.bean.Orders" init-method="initmethod" destroy-method="destroymethod"><property name="oname" value="手機" /> </bean> </beans>

測試類:

@Testpublic void test3(){ApplicationContext context = new ClassPathXmlApplicationContext("bean3.xml");Orders orders = context.getBean("orders", Orders.class);System.out.println("第四步 獲取創(chuàng)建bean實例對象");System.out.println(orders);((ClassPathXmlApplicationContext)context).close();}

xml自動裝配

什么是自動裝配:根據(jù)指定裝配規(guī)則(屬性名稱或者屬性類型),spring自動將匹配的屬性值進行注入

<!--實現(xiàn)自動裝配 bean標簽 autowire屬性 配置自動裝配autorire屬性常用兩個值:byNane根據(jù)屬性名稱注入,注入值bean的id值和類屬性名稱一樣 bype根據(jù)屬性類型注入--><bean id= “emp" class= "com.company.bean. Emp" autowired="byType">. <!--property name=" dept" ref ="dept"></property>--></bean> <bean id ="dept"class="com.company.bean.Dept"</bean>

bean管理操作有兩種方式:基于xml配置文件實現(xiàn)和基于注解方式實現(xiàn)
引入外部屬性文件:

基于注解的方式實現(xiàn)對象創(chuàng)建

第一步 引入aop依賴
第二步 開啟組件掃描
如果掃描多個包,可以多個包用逗號隔開,也可以掃描上層目錄

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"> <context:component-scan base-package="com"></context:component-scan> </beans>


四個注解:
1.@Component @Component 是所有受Spring 管理組件的通用形式,@Component注解可以放在類的頭上,@Component不推薦使用。
2.@Controller @Controller對應(yīng)表現(xiàn)層的Bean,.
3.@ Service @Service對應(yīng)的是業(yè)務(wù)層Bean
4.@ Repository @Repository對應(yīng)數(shù)據(jù)訪問層Bean ,
這四個注解功能是一樣的都能實現(xiàn)創(chuàng)建bean實例,只是在寫代碼時為了方便項目管理出于開發(fā)習慣才這樣區(qū)分

基于注解方式實現(xiàn)屬性注入

@Autowired:根據(jù)屬性類型進行自動裝配
@Qualifier:根據(jù)屬性名稱進行注入
@Resource: 可以根據(jù)類型注入也可以根據(jù)名稱注入
@Value: 注入普通類型屬性

@servicepublic class UserService{ //定義dao類型屬性 //不需要添加set方法 //添加注入屬性注解@Autowiredprivate UserDao userDao;publie void add(){System.out.printIn("service add.." );userDao. add(); }

用Autowierd注入屬性實例:

先導入aop的jar包
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"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd "><context:component-scan base-package="com.company"></context:component-scan> </beans>

dao層:

package com.company.dao;public interface UserDao {//public void add;public void update(); }package com.company.dao; import org.springframework.stereotype.Repository; @Repository public class UserDaoimp implements UserDao{@Overridepublic void update() {System.out.println("overider update");} }

service層:

package com.company.service; import com.company.dao.UserDao; import com.company.dao.UserDaoimp; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository;import javax.annotation.Resource; @Repository public class Userservice {//創(chuàng)建userdao類屬性@Autowiredprivate UserDao userdao;public void add(){System.out.println("service add");userdao.update();}

測試:

@Testpublic void Testservice(){ApplicationContext context = new ClassPathXmlApplicationContext("bean4.xml");Userservice userservice = context.getBean("userservice",Userservice.class);System.out.println(userservice);userservice.add();}

結(jié)果:

value注入實例:

@Value(value="你好")private String name;public void add(){System.out.println("service add"+name);userdao.update();

再次運行測試類結(jié)果:

AOP

Spring MVC是一款優(yōu)秀的基于MVC思想的應(yīng)用框架,它是Spring提供的一個實現(xiàn)了Web MVC設(shè)計模式的輕量級Web框架。Spring MVC框架主要由DispatcherServlet、處理器映射、控制器、視圖解析器、視圖組成,總結(jié)出Spring MVC的工作流程如下:
(1)客戶端請求提交到DispatcherServlet。
(2)由DispatcherServlet控制器尋找一個或多個HandlerMapping,找到處理請求的Controller。
(3)DispatcherServlet將請求提交到Controller。
(4)Controller調(diào)用業(yè)務(wù)邏輯處理后,返回ModelAndView。 (5)DispatcherServlet尋找一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖。
(6)視圖負責將結(jié)果顯示到客戶端。
patcherServlet將請求分發(fā)給Controller之前,需要借助于Spring MVC提供的HandlerMapping定位到具體的Controller。 HandlerMapping接口負責完成客戶請求到Controller映射。 Controller接口將處理用戶請求,這和Java Servlet扮演的角色是一致的。一旦Controller處理完用戶請求,則返回ModelAndView對象給DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和視圖(View)。從宏觀角度考慮,DispatcherServlet是整個Web應(yīng)用的控制器;從微觀角度考慮,Controller是單個Http請求處理過程中的控制器,而ModelAndView是Http請求過程中返回的模型(Model)和視圖(View)。 ViewResolver接口(視圖解析器)在Web應(yīng)用中負責查找View對象,從而將相應(yīng)結(jié)果渲染給客戶。
基于注解的控制器
在使用Spring MVC進行Web應(yīng)用開發(fā)時,**Controller是Web應(yīng)用的核心。Controller實現(xiàn)類包含了對用戶請求的處理邏輯,是用戶請求和業(yè)務(wù)邏輯之間的“橋梁”,**是Spring MVC框架的核心部分,負責具體的業(yè)務(wù)邏輯處理。
AOP(概念)
1、什么是AOP
(1)面向切面編程(方面),利用AOP可以對業(yè)務(wù)邏輯的各個部分進行隔離,從而使得
業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率
(2)通俗描述:不通過修改源代碼方式,在主千功能里面添加新功能
(3)使用登錄例子說明AOP
 Controller注解類型
  在Spring MVC中,使用org.springframework.stereotype.Controller注解類型聲明某類的實例是一個控制器

AOP底層使用動態(tài)代理
第一種有接口,使用JDK動態(tài)代理
1.使用proxy類里面的方法創(chuàng)建代理對象
第二種沒有接口,使用CGLIB動態(tài)代理

總結(jié)

以上是生活随笔為你收集整理的spring项目属性注入和bean管理xml 注入一般属性和集合属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。