微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

详解Spring框架---IOC装配Bean

本篇文章主要介绍了详解Spring框架---IOC装配Bean,提供了三种方式实例化Bean,具有一定的参考价值,有兴趣的可以了解一下。

IOC装配Bean

(1)Spring框架Bean实例化的方式提供了三种方式实例化Bean

构造方法实例化(认无参数,用的最多)

静态工厂实例化

实例工厂实例化

下面先写这三种方法的applicationContext.xml配置文件

Bean1类

public class Bean1 { //必须提供无参的构造函数 系统有认无参的构造函数 }

Bean2类

public class Bean2 { private static Bean2 Bean2 = new Bean2(); private Bean2() { } public static Bean2 createInstance() { return Bean2; } }

Bean3类

public class Bean3 { }

Bean3Factory类

public class Bean3Factory { private Bean3Factory(){ } public Bean3 getInstance(){ return new Bean3(); } }

测试类InstanceDemo

import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClasspathXmlApplicationContext; public class InstanceDemo { //实例化工厂方法 @Test public void demo3(){ //加载配置文件 创建工厂 ApplicationContext applicationContext=new ClasspathXmlApplicationContext("applicationContext.xml"); Bean3 bean3 =(Bean3) applicationContext.getBean("bean3"); System.out.println(bean3); } //静态工厂方法 @Test public void demo2(){ //加载配置文件 创建工厂 ApplicationContext applicationContext=new ClasspathXmlApplicationContext("applicationContext.xml"); Bean2 bean2 =(Bean2) applicationContext.getBean("bean2"); System.out.println(bean2); } //构造方法得到bean对象 @Test public void demo1(){ //加载配置文件 创建工厂 ApplicationContext applicationContext=new ClasspathXmlApplicationContext("applicationContext.xml"); Bean1 bean1 =(Bean1) applicationContext.getBean("bean1"); System.out.println(bean1); } } /* * 这三个都得到类似于com.study.spring.b_instance.Bean1@7229c204 的内存地址 */

 (2).Bean的其他配置:

一般情况下,装配一个Bean时,通过指定一个id属性作为Bean的名称

id 属性在IoC容器中必须是唯一的

id 的命名要满足XML对ID属性命名规范 必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号

如果Bean的名称中含有特殊字符,就需要使用name属性 例如:

因为name属性可以相同,所以后出现Bean会覆盖之前出现的同名的Bean

id和name的区别:

id遵守XML约束的id的约束.id约束保证这个属性的值是唯一的,而且必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号

name没有这些要求

如果bean标签上没有配置id,那么name可以作为id.

Bean的scope属性

 * singleton :单例的.(认的值.)

 * prototype :多例的.

* request :web开发中.创建了一个对象,将这个对象存入request范围,request.setAttribute();

* session :web开发中.创建了一个对象,将这个对象存入session范围,session.setAttribute();

* globalSession :一般用于Porlet应用环境.指的是分布式开发.不是porlet环境,globalSession等同于session;

3.Bean属性的依赖注入

前面已经知道如何获得对象,那我们接下来要知道如果给对象对象的属性赋值。

 

下面通过举例说明: 

Car 类

public class Car { private String name; private double price; public Car(String name, double price) { super(); this.name = name; this.price = price; } @Override public String toString() { return "Car [name=" + name + ", price=" + price + "]"; } }

Car2类

public class Car2 { private String name; private double price; public void setName(String name) { this.name = name; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Car2 [name=" + name + ", price=" + price + "]"; } }

CarInfo类

public class CarInfo { public String getName(){ return "哈弗H6"; } public double caculatePrice(){ return 110000; } }

CollectionBean类

import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; public class CollectionBean { private String name; private Integer age; private List hobbies; private Set numbers; private Map map; private Properties properties; 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; } public List getHobbies() { return hobbies; } public void setHobbies(List hobbies) { this.hobbies = hobbies; } public Set getNumbers() { return numbers; } public void setNumbers(Set numbers) { this.numbers = numbers; } public Map getMap() { return map; } public void setMap(Map map) { this.map = map; } public Properties getProperties() { return properties; } public void setProperties(Properties properties) { this.properties = properties; } @Override public String toString() { return "CollectionBean [name=" + name + ", age=" + age + ", hobbies=" + hobbies + ", numbers=" + numbers + ", map=" + map + ", properties=" + properties + "]"; } }

Employee类

public class Employee { private String name; private Car2 car2; public void setName(String name) { this.name = name; } public void setCar2(Car2 car2) { this.car2 = car2; } @Override public String toString() { return "Employee [name=" + name + ", car2=" + car2 + "]"; } }

TestDi测试类

import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClasspathXmlApplicationContext; public class TestDi { @Test public void demo6() { ApplicationContext applicationContext = new ClasspathXmlApplicationContext("applicationContext.xml"); CollectionBean collectionBean = (CollectionBean) applicationContext.getBean("collectionBean"); System.out.println(collectionBean); } @Test public void demo5() { ApplicationContext applicationContext = new ClasspathXmlApplicationContext("applicationContext.xml"); Car2 car2 = (Car2) applicationContext.getBean("car2_2"); System.out.println(car2); } @Test public void demo4() { ApplicationContext applicationContext = new ClasspathXmlApplicationContext("applicationContext.xml"); Employee e = (Employee) applicationContext.getBean("employee2"); System.out.println(e); } @Test public void demo3() { ApplicationContext applicationContext = new ClasspathXmlApplicationContext("applicationContext.xml"); Employee e = (Employee) applicationContext.getBean("employee"); System.out.println(e); } @Test public void demo2() { ApplicationContext applicationContext = new ClasspathXmlApplicationContext("applicationContext.xml"); Car2 car2 = (Car2) applicationContext.getBean("car2"); System.out.println(car2); } @Test public void demo1() { ApplicationContext applicationContext = new ClasspathXmlApplicationContext("applicationContext.xml"); Car car = (Car) applicationContext.getBean("car"); System.out.println(car); } }

上面这几个类都不是最主要的,我们主要是来看配置文件怎么写,这才是最关键的:

applicationContext.xml

吃饭睡觉敲代码1020304050杭州归谷200

有关applicationContext.xml这个配置文件里的内容一定要看懂,我写的还是比较基础和全面的。

有关命名空间p的使用我这里在解释下:   

p:="xxx" 引入常量值

p:-ref="xxx" 引用其它Bean对象

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐