《Spring-IOC-01》

《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使用方式是一样的

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值