首页 > 代码库 > JAVA入门[3]—Spring依赖注入

JAVA入门[3]—Spring依赖注入

Spring支持属性注入和构造器注入,它支持XML和注解两种方式。本文介绍Spring控制反转容器加载包含beans的XML文件,实现依赖注入。

一、创建bean实例

暂且抛开对象依赖,我们先看下如何通过Spring容器创建bean实例。这里要用到Spring的控制反转容器ApplicationContext,它的getBean方法可以创建bean实例

1.在Maven项目的pom.xml添加spring依赖项。

<dependencies>        <!-- mybatis核心包 -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>3.4.1</version>        </dependency>        <dependency>            <groupId>org.mybatis.generator</groupId>            <artifactId>mybatis-generator-core</artifactId>            <version>1.3.2</version>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.mybatis.generator</groupId>                <artifactId>mybatis-generator-maven-plugin</artifactId>                <version>1.3.5</version>                <configuration>                    <configurationFile>${basedir}/src/main/resources/mybatis-generator-config.xml</configurationFile>                    <verbose>true</verbose>                    <overwrite>true</overwrite>                </configuration>                <dependencies>                    <dependency>                        <groupId>mysql</groupId>                        <artifactId>mysql-connector-java</artifactId>                        <version>5.1.21</version>                    </dependency>                </dependencies>            </plugin>        </plugins>    </build>

 

2.  新建java类Category。

技术分享
 1 package bean; 2  3 public class Category { 4 private int cateId; 5 private String cateName; 6 public int getCateId(){ 7 return this.cateId; 8     } 9 public void setCateId(int id){10 this.cateId=id;11     }12 public String getCateName(){13 return this.cateName;14     }15 public void setCateName(String cateName) {16 this.cateName = cateName;17 18     }19 20     @Override21 22     public String toString() {23 24         return " 商品类型 id="+this.cateId+",name="+this.cateName;25 26     }27 28 }
Category

 

3. 新建xml配置文件,路径为resources/spring-config.xml,用来配置bean对象。

<?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-3.0.xsd"><bean id="category" class="bean.Category"></bean></beans>

 

可以为bean指定一个id或name作为标识。

4. 调用。

首先使用ClassPathXmlApplicationContext加载配置文件,然后通过ApplicationContext的getBean方法获取Category实例。

public class Main {public static void main(String[] args){//创建bean实例ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-config.xml");        Category category=applicationContext.getBean(Category.class);//设置属性category.setCateId(1);        category.setCateName("书籍");//显示结果System.out.println(category.toString());    }}

 

运行结果为:

商品类型 id=1,name=书籍

二、向构造函数传参

1.为Category添加构造函数:

public Category(int cateId,String cateName){this.cateId=cateId;this.cateName=cateName;}

 

2.修改xml配置

向构造函数传参有两种配置方式。

①通过指定参数名name传递参数

<!--方式一:name--><bean id="category" class="bean.Category"><constructor-arg name="cateId" value="99"/><constructor-arg name="cateName" value="其他"/></bean>

 

②通过指定参数索引顺序index传递参数

<!--方式二:index--><bean id="category" class="bean.Category">    <constructor-arg index="0" value="99"/>    <constructor-arg index="1" value="其他"/></bean>

 

③修改main调用进行测试。

public class Main {public static void main(String[] args){//创建bean实例ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-config.xml");        Category category=applicationContext.getBean(Category.class);//输出默认值System.out.println(category.toString());//设置属性category.setCateId(1);        category.setCateName("书籍");        System.out.println(category.toString());//运行结果://        商品类型 id=99,name=其他//        商品类型 id=1,name=书籍}}

 

三、依赖注入

依赖注入通常有以下两种方式:

  • 设置注入:IoC容器使用属性的setter方法来注入被依赖的实例。
  • 构造注入:IoC容器使用构造器来注入被依赖的实例。

1.设置注入

①新建类product,它依赖前面的Category类。

技术分享
package bean;public class Product {private int productId;private String productName;private Category productCategory;public int getProductId(){return this.productId;    }public void setProductId(int productId){this.productId=productId;    }public String getProductName(){return this.productName;    }public void setProductName(String productName) {this.productName = productName;    }public Category getProductCategory() {return productCategory;    }public void setProductCategory(Category productCategory) {this.productCategory = productCategory;    }@Overridepublic String toString() {return " 商品 id="+this.productId+";name="+this.productName+this.productCategory.toString();    }}
View Code

 

②.配置xml

在spring-config.xml中新增bean节点,对应的class属性为Product。product通过配置property元素来调用相应的setter方法以设置值,需要注意的是prodcuctCategory是通过ref来配置对category的引用。

<bean id="product" class="bean.Product"><property name="productId" value="100"></property><property name="productName" value="一千零一夜"></property><property name="productCategory" ref="category"></property></bean>

 

③.main调用

Product product=applicationContext.getBean(Product.class);System.out.println(product.toString());

 

2.、构造注入

①为product新增构造函数。

public Product(int productId,String productName,Category category){this.productId=productId;this.productName=productName;this.productCategory=category;}

 

②修改配置文件 spring-config.xml 中的product bean。

<bean id="product" class="bean.Product"><constructor-arg index="0" value="101"/><constructor-arg index="1" value="童话镇"/><constructor-arg index="2" ref="category"/></bean>

 

③运行结果同设置注入一样

JAVA入门[3]—Spring依赖注入