初学 spring —— bean 装配

来源:互联网 发布:python struct模块 编辑:程序博客网 时间:2024/06/06 03:15

此文介绍 spring 中装配bean的三种方式:xml配置文件装配、java代码装配和自动装配。本demo使用maven构建,具体如下:

准备

1、配置maven依赖,pom.xml文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>iamck.study</groupId>  <artifactId>spring</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>jar</packaging>  <name>spring</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-core</artifactId>        <version>4.3.9.RELEASE</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-beans</artifactId>        <version>4.3.9.RELEASE</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>        <version>4.3.9.RELEASE</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-test</artifactId>        <version>4.3.8.RELEASE</version>    </dependency>    <dependency>        <groupId>junit</groupId>        <artifactId>junit</artifactId>        <version>4.12</version>    </dependency>  </dependencies></project>

2、定义UserFacede接口

package iamck.study.spring.common.facade;public interface UserFacade {    public void work();}

3、创建Programmer.java,实现UserFacade

package iamck.study.spring.common.beans;import iamck.study.spring.common.facade.UserFacade;@Component//此注解标志类为一个组件,用于组件扫描。自动装配时使用。public class Programmer implements UserFacade{    @Override    public void work() {        // TODO Auto-generated method stub        System.out.println("好好敲代码。");    }}

4、创建 WiringService.java

package iamck.study.spring.ioc.wiring.service;import iamck.study.spring.common.facade.UserFacade;public class WiringService{    UserFacade user;    int flag;    public WiringService(int flag){        this.flag=flag;    }    public WiringService(UserFacade user){        this.user=user;    }    public void setFlag(int flag){        this.flag=flag;    }    public void print(){        user.work();    }}

xml配置文件装配

1、配置applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"      xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc"      xmlns:cache="http://www.springframework.org/schema/cache"      xsi:schemaLocation="http://www.springframework.org/schema/context      http://www.springframework.org/schema/context/spring-context.xsd      http://www.springframework.org/schema/beans      http://www.springframework.org/schema/beans/spring-beans.xsd">    <!--     <context:annotation-config />  开启注解处理器     <context:component-scan base-package="iamck.study.spring.ioc.wiring" />  开启组件扫描    -->    <!-- 定义bean     可选参数——        name: 定义bean的别名        class: bean的全路径        id: bean的实例名,在同一个<beans>中唯一        parent: 父类bean        autowire: 注入类型。可选值——default、no、byName、byType、constructor        scope:             singleton 从 bean 定义中只创建一个实例。此为默认的作用域。            prototype 每次对 bean 定义的访问都会创建一个新的 bean 实例。类似 java 中的 new 操作符。            request 在整个 Web 请求过程中使用相同的 bean 实例。每一个 Web 请求都会创建一个新的 bean 实例。仅用于 Web 的 ApplicationContexts。            session 针对一个特定的 http 会话使用相同的 bean 实例。不同的 http 会话创建新的 bean 实例。仅用于 Web 的 ApplicationContexts。            globalSession 类似于前面介绍的标准 HTTP Session作用域。仅用于基于 portlet 的 Web 应用程序的上下文。        init-method: 指定初始化之后调用的操作方法        destroy-method: 指定销毁之前调用的操作方法    -->    <bean id="programmer" class="iamck.study.spring.common.beans.Programmer" />    <bean id="wiringService" class="iamck.study.spring.ioc.wiring.service.WiringService">        <!-- 构造器注入         可选参数——            ref: 引用其他bean            index: 表示参数的位置,从 0 开始            name: 构造器参数的名称            type: 表示参数的类型            value: 构造参数值        -->        <constructor-arg ref="pro"/>        <!-- 为bean属性赋值,必须存在相应的setter方法        可选参数——            name: 属性名称            value: 非引用类型赋值            ref: 引用类型赋值        -->        <property name="flag" value="1" />    </bean>    <!-- 定义bean的别名 -->    <alias name="programmer" alias="pro"/></beans>

2、编写测试类 XmlWiringTest.java

package iamck.study.spring.wiring;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import iamck.study.spring.ioc.wiring.xmlWiring.service.XmlWiringService;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:iamck/study/spring/ioc/wiring/xmlWiring/config/applicationContext.xml")public class XmlWiringTest {    @Autowired    @Qualifier("wiringService")    WiringService service;    @Test    public void testXmlWiring(){        service.print();    }}

测试结果:

好好敲代码。

java 代码装配

1、创建java配置类

package iamck.study.spring.ioc.wiring.javaConfigWiring;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import iamck.study.spring.common.beans.Programmer;import iamck.study.spring.ioc.wiring.javaConfigWiring.service.JavaConfigWiringService;@Configuration//此注解标记JavaConfig类为配置类public class JavaConfig {    @Bean    public Programmer programmer(){        return new Programmer();    }    @Bean    public WiringService WiringService(){        return new WiringService(programmer());//构造器注入    }}

2、编写测试类 JavaConfigWiringTest.java

package iamck.study.spring.wiring;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import iamck.study.spring.ioc.wiring.javaConfigWiring.JavaConfig;import iamck.study.spring.ioc.wiring.service.WiringService;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes=JavaConfig.class)public class JavaConfigWiringTest {    @Autowired    private WiringService service;    @Test    public void testJavaConfigWiring(){        service.print();    }}

测试结果:

好好敲代码。

自动装配

1、创建配置类 AutowiringConfig.java

package iamck.study.spring.ioc.wiring.autowiring;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;@Configuration//开启组件扫面,并设置扫描路径@ComponentScan(basePackages={"iamck.study.spring"})public class AutowiringConfig {}

2、创建测试类 AutowiringTest.java

package iamck.study.spring.wiring;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import iamck.study.spring.common.facade.UserFacade;import iamck.study.spring.ioc.wiring.autowiring.AutowiringConfig;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes=AutowiringConfig.class)public class AutowiringTest {    @Autowired    UserFacade user;    @Test    public void testAutowirng(){        user.work();    }}

测试结果:

好好敲代码。
原创粉丝点击