zoukankan      html  css  js  c++  java
  • JAVA入门[3]—Spring依赖注入

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

    一、创建bean实例

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

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

    
    
    <properties>
    <spring.version>4.3.5.RELEASE</spring.version>
    </properties>

    <dependencies>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
    </dependency>
    </dependencies>

    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     @Override
    21 
    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;
        }
    
    @Override
    public 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>

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

    源码:点此下载

  • 相关阅读:
    Oracle 获取表结构信息
    EasyUI layout动态设置Split属性
    jquery easyui-datagrid 如何清空数据
    ORacle 复制表
    aspx调用webmethod
    RDLC添加链接
    Nginx 负载均衡 ip_hash , hash key(consistent) url_hash, least_conn
    Nginx 提升吞吐量利器 Keeplived
    Nginx Gzip 的正确使用
    Nginx 切割日志
  • 原文地址:https://www.cnblogs.com/janes/p/6378663.html
Copyright © 2011-2022 走看看