Spring4.0学习笔记 第二章 Javaconfig 显式装配(中)

原创 2017年01月03日 23:06:14

构造器注入

目录结构:

CDConfig:

package config;


import interfaces.ConstuctBean;
import interfaces.DiskImpl;
import interfaces.DiskInterface;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration   //表示配置文件
public class CDConfig {
	
	@Bean //该注解等效xml中的<bean>标签配置,spring容器会将所有带@Bean的方法生成实例存放于容器之中
	//生成的bean ID名 默认为方法名, 该bean作为构造器注入下面方法
	public ConstuctBean getCbean(){
		return new ConstuctBean();
		
	}


	
	@Bean //该注解等效xml中的<bean>标签配置,生成的bean名 默认为方法名(首字母小写)
	public  DiskInterface getDisk(){
		//getCbean()上不加@Bean注释 我们也是能正常的获取ConstuctBean的实例的,只不过每次获取的都是新的对象,
		//而加了@Bean注解,,Spring会拦截所有对它的调用,并确保直接返回该方法所创建的bean,而不是每次都对其进行实际的调用
		//也就是不是每次都生成实例,spring默认生成实例策略为单例模式
		return new DiskImpl(getCbean());
		
	}
	
}


ConstutBean:(作为构造器参数)

package interfaces;

public class ConstuctBean {
	
	public void con(){
		System.out.println("我是构造器注入bean");
	}

}
DiskImpl(DiskInterface接口的实现):

package interfaces;


public class DiskImpl implements DiskInterface {
	
	private ConstuctBean cb;
	

	public DiskImpl(ConstuctBean cb){
		this.cb=cb;
	}

	public void play() {
		cb.con();
		//输出对象句柄
		System.out.println(cb);
	}

}

调用测试代码:

CDPlayer:

package interfaces;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import config.CDConfig;


public class CDPlayer {
	
		public static void main(String[] args) {
			//JavaConfig上下文,加载配置文件
			AnnotationConfigApplicationContext ac = 
					new AnnotationConfigApplicationContext(CDConfig.class);
			DiskImpl ip=(DiskImpl) ac.getBean("getDisk");
			ip.play();
			
		}

}

输出:我是构造器注入bean
interfaces.ConstuctBean@56dacb7


现在将Config文件拆分成两个:

分别为CDConfig 和CDConfig1


CDConfig:

package config;


import interfaces.ConstuctBean;
import interfaces.DiskImpl;
import interfaces.DiskInterface;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Import(CDConfig1.class)//导入CDConfig1配置文件合成一个
@Configuration   //表示配置文件
public class CDConfig {
	@Autowired //自动注入
	private ConstuctBean cb;


	
	@Bean //该注解等效xml中的<bean>标签配置,生成的bean名 默认为方法名(首字母小写)
	public  DiskInterface getDisk(){
		//getCbean()上不加@Bean注释 我们也是能正常的获取ConstuctBean的实例的,只不过每次获取的都是新的对象,
		//而加了@Bean注解,,Spring会拦截所有对它的调用,并确保直接返回该方法所创建的bean,而不是每次都对其进行实际的调用
		//也就是不是每次都生成实例,spring默认生成实例策略为单例模式
		return new DiskImpl(cb);
	 //还有一种方式:
	  //将 @Autowired 
	  // private ConstuctBean cb; 
       // 这两行去掉,然后在public  DiskInterface getDisk()中加入参数变成public  DiskInterface getDisk(ConstuctBean cb),
		//这样虽然ConstuctBean实例在CDConfig1文件中,CDConfig1中生成的ConstuctBean实例会注入给参数cb




		
	}
	
}
CDConfig1:

package config;

import interfaces.ConstuctBean;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CDConfig1 {
	
	@Bean //该注解等效xml中的<bean>标签配置,spring容器会将所有带@Bean的方法生成实例存放于容器之中生成的bean ID名 默认为方法名,
//     该注解必须有,否则的话autowired自动注入发现容器中没有生成的ConstuctBean 实例,会发生注入错误
// 注入的前提是 已生成该bean 实例,才能正确注入
	public ConstuctBean getCbean(){
		return new ConstuctBean();
		
	}

}


package interfaces;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import config.CDConfig;


public class CDPlayer {
	
		public static void main(String[] args) {
			//JavaConfig上下文,加载配置文件
			AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(CDConfig.class);
			DiskImpl ip=(DiskImpl) ac.getBean("getDisk");
			ip.play();
			
		}

}

输出:我是构造器注入bean
interfaces.ConstuctBean@667cc058


JavaConfig 和XML配置混用


TotalConfig:

package soundsystem;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;

@Configuration
@Import({CDConfig.class})//引入另一个javaconifg配置文件
//引入xml配置文件
@ImportResource("classpath:application.xml")
public class TotalConfig {
	

}
CDConfig:

package soundsystem;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CDConfig {
	@Bean
	public DiskImpl getDk(ConstBean cb){
		
		return new DiskImpl(cb);
		
	}

}
ConstBean:

package soundsystem;

public class ConstBean {
	
	public void con(){
		System.out.println("我是构造器参数bean");
	}

}
xml:

<?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:c="http://www.springframework.org/schema/c"
  xmlns:p="http://www.springframework.org/schema/p"
  xmlns:util="http://www.springframework.org/schema/util"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd 
  http://www.springframework.org/schema/util
  http://www.springframework.org/schema/util/spring-util.xsd">
 	
 	<bean  class="soundsystem.ConstBean">
 	
 	</bean>

 </beans>

Test:

package soundsystem;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
	
		public static void main(String[] args) {
			AnnotationConfigApplicationContext ac =
					new AnnotationConfigApplicationContext(TotalConfig.class);
			ac.getBean("getDk", DiskImpl.class).play();
//			ClassPathXmlApplicationContext ac = 
//					new ClassPathXmlApplicationContext("application.xml");
//			ac.getBean("getDk", DiskImpl.class).play();
			
		}

}
输出:
sing song
我是构造器参数bean



版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring4.0学习笔记 第二章 Javaconfig 显式装配(上)

目录结构: DiskInterface是一个接口,而DiskImpl 和DiskImpl分别是它的实现,CDConfig 则是JavaConfig配置类,CDplayer为测试类 CDConf...
  • zz210891470
  • zz210891470
  • 2017年01月03日 20:29
  • 126

第2章 装配Bean---xml和javaConfig混合使用装配---笔记5

概述: 在典型的Spring应用中,我们可能会同时使用自动化和显式配置。即便你更喜欢通过JavaConfig实现显式配置,但有的时候XML却是最佳的方案。 来个珠帘合璧 1.在jav...
  • m0_37355951
  • m0_37355951
  • 2017年06月20日 15:42
  • 339

Spring实战(第四版)——第二章 装配Bean

Spring实战(第四版)——第二章 装配Bean 本章主要内容: 声明bean 构造器注入和Setter方法注入 装配bean 控制bean的创建和销毁 在Spring中,对象无需自己...
  • u012757588
  • u012757588
  • 2017年01月05日 09:33
  • 409

周志华机器学习读书笔记第二章(一)

模型评估与选择 (1)错误率+精度=1,错误率是指分类错误的样本数占样本总数的比例。 (2)误差:学习器的实际预测输出与样本的真实输出之间的差异。 训练误差:学习器在训练集上的误差。 泛化误差...
  • u013261340
  • u013261340
  • 2017年10月08日 14:53
  • 135

『机器学习——周志华』学习笔记——第二章:模型评估与选择

一、经验误差与过拟合 1、错误率:分类错误的样本数占样本总数的比例 2、精度 = 1 - 错误率 3、实际预测输出与样本的真实输出之间的差异被称为“误差”(error);在训练集上的误差被称为“训练误...
  • Sbtgmz
  • Sbtgmz
  • 2016年05月25日 23:31
  • 1356

Spring4.0学习笔记 第二章 自动装配(下)

处理自动装配的歧义性     自动装配能够提供很大的帮助,因为它会减少装配应用程序组件时所需要的显式配置的数量。不过,仅有一个bean匹配所需的结果时,自动装配才是有效的。如果不仅有一个bean能...
  • zz210891470
  • zz210891470
  • 2017年01月04日 23:47
  • 99

用javaConfig注解创建spring 工程的基本配置

最近刚看了spring实战第四部  自己也用javaconfig的方式创建了一个简单的web工程 记录下心得 首先用javaconfig创建spring web工程的时候 还是是否简单的 只需要继承A...
  • love13135816
  • love13135816
  • 2017年04月15日 14:39
  • 1057

周志华机器学习第二章读书笔记(二)

(1)ROC(Receiver Operating Characteristic)受试者工作特征 根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,得到...
  • u013261340
  • u013261340
  • 2017年10月13日 13:29
  • 66

spring用注解的方式实现属性装配

beans.xml:
  • xzf19901108
  • xzf19901108
  • 2012年07月29日 17:17
  • 940

Spring4.0学习笔记 第二章 自动装配(上)

Spring容器负责创建应用程序中的bean,并通过DI来协调这些对象的关系。 Spring提供了三种主要装配bean的机制: 1、在XML中显示配置 2、在Java中进行显式配置 3、隐式的bean...
  • zz210891470
  • zz210891470
  • 2016年12月30日 22:43
  • 276
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring4.0学习笔记 第二章 Javaconfig 显式装配(中)
举报原因:
原因补充:

(最多只允许输入30个字)