《Spring-IOC-01》
1.定义:
控制反转,把创建对象的权利交给容器来生成。
2.基本使用
导入Spring jar包
首先创建bean类
public class People {
private String name;
public People(){
}
public People(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
创建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 name="people" class="com.minyo.People" >
//通过name id 都能查找到 但是id只能有一个 name可以有多个用空格 , ; 隔开
//相当于身份证id就有一个 你的小名昵称等可以有多个
测试
public static void main(String[] args) {
ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
// People people = (People ) context.getBean("people");
// People people = context.getBean(People.class);
}
工厂注入
1.静态工厂
//工厂类
public class StaticFactory{
public static HashMap<People> map;
static{
People p1 = new People("minyo1");
People p1 = new People("minyo2");
map.put("p1",p1);
map.put("p2",p2);
}
public static People getBean(){
return map.get("p1");
}
}
容器配置文件中
<bean factory-method="getBean" id="staticPeople" class="com.minyo.StaticFactory">
2.动态工厂
public class DynamicFactory {
public People getBean(){
return new People();
}
}
容器配置文件中
<bean id="dynamicPeople" class="com.minyo.StaticFactory">
<bean id="dynamicPeople" factory-bean="dynamicPeople" factory-method="getBean"> </bean>
属性注入方式
1.构造方法注入
<bean name="people" class="com.minyo.People" >
<constructor-arg name="name" value="666"></constructor-arg> //需要有参数的构造方法
//<constructor-arg index="0" value="666"></constructor-arg> 也可以使用index下边传入值
</bean>
//还有一种简化方式
导入 xmlns:c="http://www.springframework.org/schema/c" 加入到命名空间
<bean class="com.minyo.People" id="people" c:_0="666" >
2.set方法注入
<bean name="people" class="com.minyo.People" >
<property name="name" value="666"></property>
</bean>
//还有一种简化方式
xmlns:p="http://www.springframework.org/schema/p"
<bean class="com.minyo.People" id="people" p:_0="666" >
//set方法一定要在bean类中有set get方法才可以使用
3.其他属性注入
1.属性是对象
<bean class="com.minyo.People" id="people" p:name="p1"></bean>
<bean class="com.minyo.Hello" id="hello" >
<property name="p" ref="people"></property>
</bean> //ref属性关联到上边已有的对象
2.属性是数组array
<property name="arrays">
<array>
<value>p1</value>
<value>p1</value>
<value>人p3</value>
</array>
</property>
3.属性是List
<property name="pl">
<list>
<!--也可以是bean标签-->
<bean class="com.minyo.People" p:name="p1"></bean>
<bean class="com.minyo.People" p:name="p2"></bean>
<bean class="com.minyo.People" p:name="p3"></bean>
</list>
</property>
4.属性是Map
<property name="map">
<map>
<entry key="name1" value="张三" ></entry>
<entry key="name2" value="李四" ></entry>
<entry key="name3" value="王五" ></entry>
</map>
</property>
5.属性是Properties
<property name="prop">
<props>
<prop key="name">赵六</prop>
</props>
</property>
java配置类代替applicationContext.xml
首先创建AppContext.class文件
@Configuration
public class Beanconfig {
/**
* @bean 跟配置文件里<bean></bean>是一样的
* @return
*/
@Bean(name = "user1")
public User getUser(){
return new User();
}
}
测试
@Test
public void func1(){
/*
通过@Configuration初始化IOC容器
*/
ApplicationContext ac =
new AnnotationConfigApplicationContext(Beanconfig.class);
System.out.println(ac.getBean("user1",User.class));
}
和xml使用方式是一样的