zoukankan      html  css  js  c++  java
  • 【Spring 2】spring的属性注入形式

    一、注入简介

    spring是一个java bean的容器,它摒弃了过去通过new关键字调用类再调用类的实例的形式,通过依赖注入维护者一系列的java  bean的示例。通过spring所提供的依赖注入的方法,我们可以管理这些java bean之间的引用关系。

    spring的注入形式,主要是有4种:setter方法、构造器方法、静态 / 实例工厂方法、注解,这里主要介绍属性注入的:setter方法和构造器方法。

    二、实例解析

    2.1,setter方法属性注入

    首先,在applicationContext里面进行配置

    <pre name="code" class="html"><span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
    	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"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
    
    	 <bean id="userDao4Mysql" class="com.angel.spring.dao.UserDao4MySqlImpl"></bean>  
      
        <span>	</span><bean id="userDao4Oracle" class="com.angel.spring.dao.UserDao4OracleImpl"></bean>  
      
       <span>	</span><bean id="userManager" class="com.angel.spring.manager.UserManagerImpl">  
            <span>	</span><property name="userDao" ref="userDao4Oracle" />  
        <span>	</span></bean> 
    
    </beans></span>

    
    最后,测试类
    

    <span style="font-family:KaiTi_GB2312;font-size:18px;"></span><span style="font-family:KaiTi_GB2312;font-size:18px;">package com.angel.spring.manager;  
      
    import com.angel.spring.dao.UserDao;  
      
    public class UserManagerImpl implements UserManager {  
          
        private UserDao userDao;  
      
        public void addUser(String username, String password) {  
             userDao.addUser(username, password);  
        }  
      
        public void setUserDao(UserDao userDao) {  
            this.userDao = userDao;  
        }  
    }  </span>

    2.2,构造器方法属性注入

    首先,在application中的配置

    <pre name="code" class="html"><span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
    	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"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
    	<span style="color:#ff0000;">default-autowire="byType"</span>>
    
    	<bean id="bean2" class="com.angel.spring.Bean2"></bean>
    
    	<bean id="beantest3" class="com.angel.spring.Bean3">
    		<constructor-arg index="0" value="1002" />
    		<constructor-arg index="1" value="Angel" />
    		<constructor-arg index="2" value="23" />
    	</bean>
    </beans></span>

    
    其次,在实体类中提供构造方法
    

    <pre name="code" class="java"><span style="font-family:KaiTi_GB2312;font-size:18px;">public Bean3(int id,String name,String sex){
    	this.id=id;
    	this.name=name;
    	this.sex=sex;
    }</span>
    
    

    注意:spring 提供了Resource、Autowired这两个注解用于注入,另外在xml配置文件中,beans标签下有一个参数default-autowire用来设置默认的注入类型。这里我先说明一下default-autowire的用途。首先default-autowire参数有几个可选值:

    default:实际上是会优先执行constructor然后是byType
    byType:这个是会根据类型去注入,当找到了会直接注入,没有找到不会报错,但是找到多个会报No unique bean of type的错误
    byName:这个会根据name注入
    constructor:这个是通过构造注入
    no:不启用自动注入

    三、总结

    以上就介绍了属性注入的两种形式:setter和构造器注入。spring同样还支持注解注入,但是今天例子没有做完,等做完了之后,再次进行总结!以前就知道个依赖注入,可是到底是怎么注入的,都没有认真了解过,学习还是需要踏踏实实的!


  • 相关阅读:
    转载:Background Worker in .NET 2.0
    转载:WPF 3.5 SP1 Feature: BindingGroups with Itemlevel Validation
    转载:NonLive Scrolling延时滚动数据
    俺的机器上VS的MenuBar的名称列表
    动态控件的状态问题的分析 概括
    基于插件的权限系统构想
    《ASP.NET组件设计》没提到的一个类
    有关集中用户的问题
    SQL Server日志清空方法
    ADO事务处理方式运行正常
  • 原文地址:https://www.cnblogs.com/hhx626/p/6010310.html
Copyright © 2011-2022 走看看