Spring framework IOC 学习笔记

Spring framework IOC 学习笔记
Spring framework 注入依赖相关 配置
本人是用maven 在pom.xml中的依赖如下

dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.2.RELEASE</version>
        </dependency>

    </dependencies>

构造依赖注入 注入-> Properties对象
xml:

<bean id="ioctest" class="com.jenius.web.meta.IocTest" >
        <constructor-arg>
            <props>
                <prop key="color">red</prop>
                <prop key="size">18</prop>
            </props>
        </constructor-arg>
    </bean>

java source:

 public IocTest(Properties ps)
    {
        this.color=ps.getProperty("color");
        this.size=Integer.valueOf(ps.getProperty("size"));
    }

———————————————————
注入->范性容器
map:

<constructor-arg>
        <map>
            <entry key="color" value="red"></entry>
            <entry key="size" value="17"></entry>
        </map>
 </constructor-arg>

java source:

public IocTest(Map<String ,String> prams)
    {
        this.color=prams.get("color");
        this.size=Integer.valueOf(prams.get("size"));
    }

从配置文件 注入-> header.properties
color=green
size=22
application-context.xml

<bean id="ioctest" class="com.jenius.web.meta.IocTest" >
        <constructor-arg name="color" value="${color}"></constructor-arg>
        <constructor-arg name="size" value="${size}"></constructor-arg>
    </bean>
    <bean id="headerproperties" 
       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="location" value="classpath:header.properties"/>
       </bean>

java source:

public IocTest(String color,int size)
    {
        this.color = color;
        this.size = size;
    }

其他对象为参数是 构造函数的依赖注入 加serter 注入到其他对象:
application-context.xml

<bean id="testheader" class="com.jenius.web.test.TestHeader">
        <property name="color" value="${color}"></property>
        <property name="size" value="${size}"></property>
    </bean>
    <bean id="ioc" class="com.jenius.web.test.Ioc">
        <constructor-arg>
            <ref bean="testheader" />
        </constructor-arg>
    </bean>
    <bean id="headerproperties" 
       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="location" value="classpath:header.properties"/>
       </bean>

——————————————————————
自动装配(用setter method)
autowire=“byName” 根据Bean 的名字来实现自动装配的 根据bean的名字来找的 。

<bean id="header" class="com.jenius.web.test.TestHeader">
        <property name="color" value="${color}"></property>
        <property name="size" value="${size}"></property>
    </bean>

    <bean id="ioc" class="com.jenius.web.test.Ioc" autowire="byName">
    </bean>

autowire=“byType” 根据Bean类型

autowire=“constructor”

application-context.xml

<bean id="ioc" class="com.jenius.web.test.Ioc" autowire="constructor">
    </bean>

java source:

public Ioc(Header header)
    {
        this.header=header;
    }

———————————————
Annotation
@Component 定义Bean
@Value properties 注入 不需要setter method
application-context.xml

<context:component-scan base-package="com.jenius.web.test" /> 

    <bean id="ioc" class="com.jenius.web.test.Ioc" autowire="constructor"><!-- 这里要用bean的注解所以要添加 -->
    </bean>
    <bean id="headerproperties" 
       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="location" value="classpath:header.properties"/>
       </bean>

java source :

public class Ioc {
    private Header header;

    public Ioc(Header header)// Annotation 默认的Bean 名称就是属性的名称这里指header
    {
        this.header=header;
    }
    public void use()
    {
        System.out.println("Ioc use  "+header.getInfo());
        header.dowork();
    }

}
package com.jenius.web.test;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.jenius.web.test.Header;

@Component("header") //默认是该类的名称(TestHeader类) bean的名称如果和默认名称不一致需要重新指定
public class TestHeader implements Header {
    @Value("${color}")
    private String color;
    @Value("${size}")
    private int size;


    public void setColor(String color)
    {
        this.color=color;
    }
    public void setSize(int size)
    {
        this.size=size;
    }
    public void dowork() {
        System.out.println("Working");
    }

    public String getInfo() {
        return "size="+size+"  color="+color;
    }

}

@Autowirde @Resource 自动装配依赖 这两个依赖如果实在Spring框架中效果是一样的如果要更换IOC容器的话 要用@Resource 这个是在 javax.annotation.Resourc这个包里的
application-context.xml

<bean id="ioc" class="com.jenius.web.test.Ioc" ></bean>  <!-- 将autowire="default"自动装配去掉 -->
java source ;
public class Ioc {
    @Autowired  //将setter method去掉
    private Header header;

    public void use()
    {
        System.out.println("Ioc use  "+header.getInfo());
        header.dowork();
    }

}

@PostConstructor @PreDestroy 生命周期回调
作用相当于xml 文档中 <bean id=“” class=“” init-method=“” destroy-method=“” ></bean>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值