大家好,又见面了,我是全栈君。
在spring的IOC容器里配置Bean
在xml文件里通过bean节点来配置bean
id:Bean的名称
spring容器
在spring IOC容器读取Bean配置创建Bean实例之前。必须对它进行实例化。仅仅有在容器实例化后,才干够从IOC容器里获取Bean实例并使用
spring提供了两种类型的IOC容器实现
- BeanFactory:IOC容器的基本实现
- ApplicationContext 提供了很多其它的高级特性。是BeanFactory的子接口
- BeanFactory是spring框架的基础设施,面向spring本身,ApplicationContext面向使用spring框架的开发人员。差点儿全部的应用场合都直接使用ApplicationContext而非底层的BeanFactory
- 不管使用何种方式。配置文件是同样的
- ApplicationContext的主要实现类:
- ClassPathXmlApplication:从类路径下载入配置文件
- FileSystemXmlApplicationContext:从文件系统中载入配置文件
- ConfigurableApplicationContext扩展于ApplicationContext,新添加两个主要方法:refresh()和close()。让ApplicationContext具有启动,刷新和关闭上下文的能力
- ApplicationContext在初始化上下文时就实例化全部单例的Bean。
- WebApplicationContext是专门为WEB应用而准备的,它同意从相对于WEB根文件夹的路径中完毕初始化工作
- 调用ApplicationContext的getBean()方法
- 属性注入
- 构造器注入
- 工厂方法注入(非常少使用,不推荐)
- 属性注入即通过setter方法注入Bean的属性值或依赖的对象
- 属性注入使用<property>元素,使用name属性指定Bean的属性名称。value属性或<value>子结点指定属性值
- 属性注入是实际应用中最经常使用的注入方式
- 通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化后就能够使用
- 构造器注入在<constructor-arg>元素里声明属性。<constructor-arg>中没有name属性
package com.coslay.beans; public class Car { private String brand; private String corp; private double price; private int maxSpeed; public Car(String brand, String corp, double price) { super(); this.brand = brand; this.corp = corp; this.price = price; } public Car(String brand, String corp, int maxSpeed) { super(); this.brand = brand; this.corp = corp; this.maxSpeed = maxSpeed; } public String toString() { return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price + ", maxSpeed=" + maxSpeed + "]"; } }
HelloWorld.java
package com.coslay.beans; public class HelloWorld { private String name; public void setName(String name){ System.out.println("setName: "); this.name = name; } public void hello(){ System.out.println("hello: "+name); } public HelloWorld(){ System.out.println("HelloWorld's Constructor..."); } }
Main.java
package com.coslay.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.coslay.beans.Car; import com.coslay.beans.HelloWorld; public class Main { public static void main(String[] args) { // //创建HelloWorld的一个对象 // HelloWorld helloWorld = new HelloWorld(); // //为name属性赋值 // helloWorld.setName("yyz"); // 使用spring以后,这两步可交给spring完毕 //1.创建spirng的IOC容器对象 //ApplicationContext 代表IOC容器 //ClassPathXmlApplicationContext:是ApplicationContext接口的实现类,该实现类从类路径下载入配置文件 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); //创建容器的时候会调用全部bean对象的构造器,并为bean注入(赋值) //2.从IOC容器中获取Bean实例 //利用id定位到IOC容器中的bean //HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld"); //利用类型返回IOC容器中的Bean。但要求IOC容器中必须仅仅能有一个该类型的Bean //HelloWorld helloWorld = ctx.getBean(HelloWorld.class); //调用hello方法 //helloWorld.hello(); Car car = (Car) ctx.getBean("car"); System.out.println(car); Car car2 = (Car) ctx.getBean("car2"); System.out.println(car2); } }
applicationContext.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 class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无參数的构造器 id:标识容器中的bean。id唯一 --> <bean id="helloWorld" class="com.coslay.beans.HelloWorld"> <property name="name" value="yyz"></property> </bean> <!-- 通过构造方法来配置bean的属性 --> <bean id="car" class="com.coslay.beans.Car"> <constructor-arg value="Audi" index="0"></constructor-arg> <constructor-arg value="ShangHai" index="1"></constructor-arg> <constructor-arg value="300000" type="double"></constructor-arg> </bean> <!-- 使用构造器注入属性值能够指定參数的位置和參数的类型,以区分重载的构造器 --> <bean id="car2" class="com.coslay.beans.Car"> <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg> <constructor-arg value="Shanghai" type="java.lang.String"></constructor-arg> <constructor-arg value="240" type="int"></constructor-arg> </bean></beans>
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116439.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...