最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Spring框架:接口,了解bean的作用域,spring容器,setter注入,自動裝配【詩書畫唱】

2021-03-17 23:08 作者:詩書畫唱  | 我要投稿

概括:

舉例

個人對Spring好處的理解和修改部分?jǐn)?shù)據(jù)后要跟著改的內(nèi)容

個人注意事項(xiàng)記錄?

告訴你什么是setter注入(引用注入)

把這些關(guān)聯(lián)大的關(guān)系稱為“耦合”。spring框架的使用的作用之一為“松耦合”。

contains包含

spring容器中常用的方法。

bean的作用域

自動裝配


自動裝配可以減少原先要寫配置文件的代碼


3、SPRINGCORE框架_Spring容器.ppt


4、SPRINGCORE框架_了解Bean.ppt


使用setter注入,byName自動裝配等方法調(diào)用類的方法的代碼例子


public interface Track?


個人理解:setter注入和構(gòu)造器注入等都有不同的類型,比如值注入,引用注入等等







舉例

個人對Spring好處的理解和修改部分?jǐn)?shù)據(jù)后要跟著改的內(nèi)容:

其實(shí)如果要去引入和使用導(dǎo)入別人寫的Spring項(xiàng)目的話,需要修改的文件有:配置文件等等。有時自己可以修改下包名等,之后配置文件也對應(yīng)地修改。其實(shí)修改內(nèi)容時,基本只要注意配置文件的設(shè)置等等。這些就是我理解的Spring框架的好處之一。

個人對Spring好處的理解和修改部分?jǐn)?shù)據(jù)后要跟著改的內(nèi)容:

其實(shí)如果要去引入和使用導(dǎo)入別人寫的Spring項(xiàng)目的話,需要修改的文件有:配置文件等等。有時自己可以修改下包名等,之后配置文件也對應(yīng)地修改。其實(shí)修改內(nèi)容時,基本只要注意配置文件的設(shè)置等等。這些就是我理解的Spring框架的好處之一。


個人注意事項(xiàng)記錄?

告訴你什么是setter注入(引用注入)

告訴你什么是setter注入和引用注入(個人理解:setter注入和構(gòu)造器注入等都有不同的類型,比如值注入,引用注入等等)
之后這個部分代碼就可以不用改了,因?yàn)閿?shù)據(jù)統(tǒng)一在配置文件中改


把這些關(guān)聯(lián)大的關(guān)系稱為“耦合”。spring框架的使用的作用之一為“松耦合”。

把這些關(guān)聯(lián)大的關(guān)系稱為“耦合”。spring框架的使用的作用之一為“松耦合”。


contains包含


這個報錯說明上圖的調(diào)用中的2個class重名了


spring容器中常用的方法。


spring容器中常用的方法。

bean的作用域

bean的作用域

自動裝配。

自動裝配可以減少原先要寫配置文件的代碼
自動裝配。


使用setter注入,byName自動裝配等方法調(diào)用類的方法的代碼例子 START


package com.SSHC.bean;


public class Bike implements Track {


@Override

public void run() {

// TODO Auto-generated method stub

System.out.println("踩踏運(yùn)載(打印出這句話說明成功調(diào)用"

+ "Bike類中的run()方法)");

}

? ??

}

package com.SSHC.bean;


public class Car implements Track{

@Override

? ? public void run(){

? ? System.out.println("四輪運(yùn)載,打印出這句話,說明調(diào)用了"

? ? + "Track類中的run方法");

? ? }

}


package com.SSHC.bean;


public class Cat {

? ? private String name;

? ? private Integer age;

? ??

? ? public Cat(){

? ?

? ? }

? ? public Cat(String n,Integer a) {

? ? this.name = n;

? ? this.age = a;

? ? }

? ??

? ? public void play(){

? ? System.out.println("正在玩耍,Cat類中含有的abc方法"

? ? + "\n 因?yàn)閐efault-init-method被調(diào)用了\n \n ");

? ? }

? ??

? ? public void abc(){

? ? System.out.println("初始貓開始...,Cat類中含有的abc方法"

? ? + "\n 因?yàn)閐efault-init-method被調(diào)用了\n \n ");

? ? }

}





package com.SSHC.bean;


public class Dog {

? ? private String name;

? ? private Integer age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

@Override

public String toString() {

// TODO Auto-generated method stub

return "名字是:" + this.name + ",年齡是:" + this.age;

}

? ??

}

package com.SSHC.bean;


public class Person {

? ? private String name;//值類型

? ? private Cat pet;//引用類型

? ??

? ? public Person(String n,Cat c){

? ? this.name = n;

? ? this.pet = c;

? ? }

? ? public void guanging(){

? ? this.pet.play();

? ? }

? ? public void abc(){

? ? System.out.println("初始化人開始...Person類中含有的abc方法"

? ? + "\n 因?yàn)閐efault-init-method被調(diào)用了\n \n ");

? ? }

}


package com.SSHC.bean;


public class Plane implements Track {


@Override

public void run() {

// TODO Auto-generated method stub

System.out.println("空中運(yùn)載");

}


}



package com.SSHC.bean;


public class ProductDao {

? ? public void add(){

? ? System.out.println("ProductDao中的add新增方法被調(diào)用了!");

? ? }

}


package com.SSHC.bean;


public class Student {

? ? private String name;//值

? ? private Dog dog;//引用

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Dog getDog() {

return dog;

}

public void setDog(Dog dog) {

this.dog = dog;

}

public void play(){

System.out.println("正在跟" +

this.dog.getName() + "玩耍,"

+ "\n 調(diào)用了Student類中的play方法"

+ "\n");

}

}

package com.SSHC.bean;

//交通工具接口

public interface Track {

//交通工具的運(yùn)載方式

? ? void run();

}


package com.SSHC.bean;


public class UserDao {

? ? public void selectAll(){

? ? System.out.println("查詢所有,調(diào)用了UserDao中的selectAll方法");

? ? }

}

package com.SSHC.bean;


public class UserService {

private UserDao userDao;

private ProductDao productDao;

private Person p;

? ? public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

public void setProductDao(ProductDao productDao) {

this.productDao = productDao;

}

public void setP(Person p) {

this.p = p;

}

public void loadData(){

? ? userDao.selectAll();

? ? productDao.add();

? ? p.guanging();

? ? }

}


package MainText;



import java.util.Scanner;


import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;


import com.SSHC.bean.Cat;

import com.SSHC.bean.Dog;

import com.SSHC.bean.Person;

import com.SSHC.bean.Student;


public class Demo {


public static void main(String[] args) {

// TODO Auto-generated method stub





//new關(guān)鍵字不要出現(xiàn)在代碼中

? ? ? ? //Cat c = new Cat();

? ? ? ? //Cat c1 = new Cat("大黃",1);

? ? ? ? //獲取spring容器

ApplicationContext ctx = new?

ClassPathXmlApplicationContext("applicationContext.xml");


while(true){

/*配置文件中beans標(biāo)簽中

* 設(shè)置了 default-init-method="abc"

* ,那么針對全部bean,如果有abc的方法,

* 創(chuàng)建這個bean時就會調(diào)用一次這個方法。*/

System.out.print("請選擇操作:"

+ "1.setter注入,Dog測試(配置文件中設(shè)置了value值) "

+ ",2.setter注入,Student測試,"

+ "\n 3.用Spring框架調(diào)用Cat中的方法,"

+ "4.用Spring框架調(diào)用Person中的方法,"

+ "\n"

+ "5.打印ctx.getType(XXX)方法");

Scanner input = new Scanner(System.in);

int num = input.nextInt();



if(num==1){

// Dog d = new Dog();

// d.setName("詩書畫唱養(yǎng)的的狗狗");

// d.setAge(6);



Dog d = (Dog) ctx.getBean("d");

System.out.println(d);

}

if(num==2){

// Student s = new Student();

// s.setName("小華");

// s.setDog(d);

Student s = (Student) ctx.getBean("s");

s.play();


}

if(num==3){

Cat c1 = (Cat) ctx.getBean("c1");

c1.play();

}

if(num==4){

// //Person p = new Person("小明",c1);


Person p = (Person) ctx.getBean("p");

p.guanging();

}


if(num==5){


System.out.println(ctx.getType("s"));}

}

}

}




package MainText;


import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;


import com.SSHC.bean.Cat;

import com.SSHC.bean.Dog;

import com.SSHC.bean.Person;


public class Demo2 {


public static void main(String[] args) {

// TODO Auto-generated method stub

//new關(guān)鍵字不要出現(xiàn)在代碼中

? ? ? ? //Cat c = new Cat();

? ? ? ? //Cat c1 = new Cat("大黃",1);

? ? ? ? //獲取spring容器

ApplicationContext ctx = new?

ClassPathXmlApplicationContext("applicationContext.xml");

Cat c1 = (Cat) ctx.getBean("c1");

c1.play();

// //Person p = new Person("小明",c1);

Person p = (Person) ctx.getBean("p");

p.guanging();


// Dog d = new Dog();

// d.setName("旺旺");

// d.setAge(2);

}


}


package MainText;

import java.util.Scanner;


import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;


import com.SSHC.bean.Bike;

import com.SSHC.bean.Car;

import com.SSHC.bean.Cat;

import com.SSHC.bean.Track;

import com.SSHC.bean.UserService;


public class Test {


public static void main(String[] args) {

while(true){

System.out.print("請選擇操作:"

+ "1.使用Spring框架后不使用的new,"

+ "\n"

+ "import關(guān)鍵字的調(diào)用Bike,Cat類中的方法"

+ ",\n 2.Spring框架調(diào)用plane中的run方法"

+ "\n 3.使用containsBean判斷applicationContext.xml文件"

+ "中\(zhòng)n是否包含id值為c1的bean標(biāo)簽的部分,"

+ "\n打印true就說明存在,false就是不存在,"

+ " "

+ "\n 4.使用Spring框架中的byName的自動裝配"

+ "\n 來調(diào)用userService中的方法"

+ "\n");

? ?Scanner input = new Scanner(System.in);

? ?int num = input.nextInt();



if(num==1){

? ? ? ? Bike b = new Bike();

? ? ? ? b.run();

? ? ? ??

? ? ? ? Car c = new Car();

? ? ? ? c.run();

}

if(num==2){

ApplicationContext ctx = new?

ClassPathXmlApplicationContext("applicationContext.xml");

Track t = (Track) ctx.getBean("track");

/*配置文件中

?* <bean id="track"?

?* class="com.SSHC.bean.Plane"></bean>

?* 所以,調(diào)用的是plane中的run方法*/

t.run();



}

if(num==3){

ApplicationContext ctx = new?

ClassPathXmlApplicationContext("applicationContext.xml");

System.out.println(ctx.containsBean("c1"));

//contains:包含


}

if(num==4){

ApplicationContext ctx = new?

ClassPathXmlApplicationContext("applicationContext.xml");

UserService userService =?

(UserService) ctx.getBean("userService");

userService.loadData();

}}}


}

<?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"

? ? xmlns:mvc="http://www.springframework.org/schema/mvc"

? ? xmlns:tx="http://www.springframework.org/schema/tx"

? ? 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-4.1.xsd

? ? ? ? http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd

? ? ? ? http://www.springframework.org/schema/tx?

? ? ? ? http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"

? ? ? ? default-init-method="abc">

? ?<bean id="c" class="com.SSHC.bean.Cat"></bean>?

? ?<bean id="c1" class="com.SSHC.bean.Cat" scope="prototype">

? ? ? ?<constructor-arg value="大黃"></constructor-arg>

? ? ? ?<constructor-arg value="1"></constructor-arg>

? ?</bean>

? ?<bean id="p" class="com.SSHC.bean.Person">

? ? ? ?<constructor-arg value="小明"></constructor-arg>

? ? ? ?<constructor-arg ref="c1"></constructor-arg>

? ?</bean>

? ?<bean id="d" class="com.SSHC.bean.Dog">

? ? ? ?<property name="name" value="詩書畫唱養(yǎng)的的狗狗"></property>

? ? ? ?<property name="age" value="2"></property>

? ?</bean>

? ?<bean id="s" class="com.SSHC.bean.Student">

? ? ? ?<property name="name" value="小華"></property>

? ? ? ?<property name="dog" ref="d"></property>

? ?</bean>

? ?

? ?<bean id="track" class="com.SSHC.bean.Plane"></bean>

? ?

? ?<bean id="userDao" class="com.SSHC.bean.UserDao"></bean>

? ?<bean id="productDao" class="com.SSHC.bean.ProductDao"></bean>

? ?<bean id="userService" class="com.SSHC.bean.UserService"

? ? ? ?autowire="byName">

? ? ? ?<!-- 在進(jìn)行setter注入時,如果name和ref相同,那么就可以進(jìn)行byName自動裝備 -->

? ? ? ?<!-- <property name="userDao" ref="userDao"></property> -->

? ?</bean>

</beans>


在bean包中的實(shí)體類(比如Bike類)的話就是會聲明一個方法(比如Bike類中的run的方法,方法

聲明了一個打引語句,打印成功,聲明調(diào)用這個方法成功了)


。以前調(diào)用這個方法的話,就要在含main方法中的class中new出這個方法所在位置的class的類,這樣

的話就還要,使用import關(guān)鍵導(dǎo)入這個類的包。


但是使用了Spring框架的話,就是只要在applicationContext.xml這個應(yīng)用上下文(這個名字寫出了Spring類似

框架連接的橋梁的作用)的xml配置文件中

使用bean標(biāo)簽,設(shè)置其中的項(xiàng)目中唯一值的id等等。


之后用代碼獲取這個applicationContext.xml

代碼運(yùn)行結(jié)果和說明:








使用setter注入,byName自動裝配等方法調(diào)用類的方法的代碼例子

END



3、SPRINGCORE框架_Spring容器.ppt START


SPRINGCORE框架

Spring容器


Spring上下文(一)

? ? Spring容器最基本的接口就是BeanFactory。該類負(fù)責(zé)配置、創(chuàng)建和管理Bean,它有一個名為applicationContext的子接口,稱為Spring上下文。 ? ? BeanFactory包含如下的幾種方法:

Spring上下文(二)

? ? ?ApplicationContext是BeanFactory的一個子接口,在一般的JAVA應(yīng)用程序中,常用的實(shí)現(xiàn)類有以下幾種: 1、FileSystemXmlApplicationContext 2、ClassPathXmlApplicationContext 3、AnnotationConfigApplicationContext ? ? ? 另外,如果需要在web開發(fā)中使用Spring容器,則需要使用以下的幾種實(shí)現(xiàn)類: 1、XmlWebApplicationContext 2、AnnotationConfigWebApplicationContext

Java應(yīng)用程序中的Spring容器

? ? ? ?對于獨(dú)立的Java應(yīng)用程序,必須提供Spring容器管理的Bean的詳細(xì)配置信息,而Spring的配置信息通常采用XML文件來進(jìn)行管理,因此可以通過BeanFactory的實(shí)現(xiàn)類XmlBeanFactory來實(shí)例化BeanFactory,而XML文件將被作為參數(shù)傳入。XML配置文件通常使用Resource對象傳入。 ? ? ? 1、創(chuàng)建一個非web工程,導(dǎo)入spring相關(guān)包。 ? ? ? 2、在工程根目錄下創(chuàng)建文件bean.xml。 ? ? ? 3、創(chuàng)建類DemoBean及其方法sayHi,該方法負(fù)責(zé)打印hi ? ? ? 4、創(chuàng)建測試類Test,包含main方法。

JavaWeb程序中的Spring容器

? ? ? ?對于JavaWeb程序,對XML文件進(jìn)行解析的工作應(yīng)該在工程啟動時進(jìn)行,可以通過配置由Spring框架自帶的監(jiān)聽類ContextLoaderListener來實(shí)現(xiàn)。 ? ? ? 注意:這個監(jiān)聽類實(shí)際上也可以自己定義,但需要xml的某種解析模式以及反射技術(shù)的配合才可以完成。可通過查看org.springframework.web.context.ContextLoaderListener源碼進(jìn)行了解。





3、SPRINGCORE框架_Spring容器.ppt END

4、SPRINGCORE框架_了解Bean.ppt START

SPRINGCORE框架

了解Bean


Bean的基本定義(一)

在Spring的配置文件中,<beans>元素是作為根元素出現(xiàn)的,可以指定以下的屬性。

Bean的基本定義(二)

在Spring的配置文件中,<bean>元素是<beans>元素的子元素,每個<bean>元素都代表定義了一個類。<bean>元素可以指定以下的屬性

Bean的基本定義(三)

定義<bean>時,通常需要指定兩個屬性。 1、id:確定Bean的唯一標(biāo)識符,容器對Bean管理、訪問以及指定Bean之間的依賴關(guān)系,都通過該屬性完成。在每個spring容器中,都是唯一的。 2、class:指定Bean的具體實(shí)現(xiàn)類全路徑名。

設(shè)置BEAN的作用域

所有的Spring Bean默認(rèn)都是單例的,當(dāng)容器分配一個Bean時,無論是通過裝配還是調(diào)用容器的getBean方法,總是返回同一個Bean的實(shí)例,如果需要改變這種情況,可以通過設(shè)置bean的作用域scope屬性來覆蓋Bean的單例配置。

使用自動裝配注入Bean(一)

?Spring能自動裝配Bean與Bean之間的依賴關(guān)系,即無須使用ref顯式指定依賴的Bean。由BeanFactory檢查XML配置文件的內(nèi)容,根據(jù)某種規(guī)則,為主調(diào)Bean注入依賴關(guān)系。自動裝配可通過指定<beans>元素的default-autowire或者<bean>元素的autowire屬性指定。 ? ? ? 注意:自動裝配能夠減少配置文件的工作量,但是降低了依賴關(guān)系的透明性和清晰性。autowire屬性包含以下幾種值

使用自動裝配注入Bean(二)

創(chuàng)建如下的類:

使用自動裝配注入Bean(三)

byName:

1、查找class指定類中所有的set方法名,獲得將set去掉并且首字母小寫的字符串。

2、在Spring容器中尋找id為此字符串名稱的Bean對象。

3、如果有,就進(jìn)行注入;如果沒有,就報空指針異常。




使用自動裝配注入Bean(四)

byType:

首先需要保證:同一類型的對象,在spring容器中唯一。如果不唯一,會報不唯一的異常




使用自動裝配注入Bean(五)

1、創(chuàng)建UserDao類,創(chuàng)建PubService類,在PubService類中包含一個私有的UserDao類型的成員屬性以及setter。 2、修改配置文件,通過pubService的autowire="byName"進(jìn)行自動裝配。 3、修改配置文件 ,通過pubService的autowire="byType"進(jìn)行自動裝配。 4、在PubService類中,添加一個構(gòu)造方法,該構(gòu)造方法包含一個UserDao類型的參數(shù)。 5、修改配置文件,通過pubService的autowire="constructor"進(jìn)行自動裝配。 注意:顯式的依賴注入將覆蓋自動裝配。



4、SPRINGCORE框架_了解Bean.ppt END



Spring框架:接口,了解bean的作用域,spring容器,setter注入,自動裝配【詩書畫唱】的評論 (共 條)

分享到微博請遵守國家法律
襄垣县| 清涧县| 定日县| 石家庄市| 博野县| 米泉市| 阳曲县| 林州市| 绵阳市| 泰来县| 婺源县| 库伦旗| 类乌齐县| 都匀市| 昭觉县| 华池县| 抚顺市| 公主岭市| 合肥市| 兴城市| 瑞安市| 怀仁县| 东光县| 临洮县| 拉萨市| 灯塔市| 宣化县| 黄骅市| 朝阳区| 永顺县| 甘谷县| 中牟县| 祁阳县| 麻栗坡县| 京山县| 建瓯市| 望江县| 德惠市| 华阴市| 黑河市| 达拉特旗|