`
ponlya
  • 浏览: 164369 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring3之 bean简单属性注入

阅读更多

DI (依赖注入)有二种: Constructor-based dependency injection and Setter-based dependency

a)、Constructor-based  DI

com.spring305.test.beanInit.po.InitSingeBean.java

import java.util.Date;

public class InitSingeBean {

	private int id;
	private Integer age;
	private String name;
	private Date birth;
	private Double weight;
	private float height;
	private Boolean sex;

	public InitSingeBean() {
		super();
		System.out.println(this);
	}

	public InitSingeBean(int id, Integer age) {
		super();
		this.id = id;
		this.age = age;
		System.out.println(this+"_"+id+"_"+age);
	}
	
	public InitSingeBean(int id, Integer age, String name, Date birth,
			Double weight, float height, Boolean sex) {
		super();
		this.id = id;
		this.age = age;
		this.name = name;
		this.birth = birth;
		this.weight = weight;
		this.height = height;
		this.sex = sex;
		System.out.println(this);
	}
	public InitSingeBean(int id, Integer age, String name, Double weight, float height, Boolean sex) {
		super();
		this.id = id;
		this.age = age;
		this.name = name;
		this.weight = weight;
		this.height = height;
		this.sex = sex;
		System.out.println(this);
	}

	public void test(){
		System.out.println(id+"_"+age+"_"+name+"_"+birth+"_"+weight+"_"+height+"_"+sex);
	}

.....getter settter
}

 Test.java
 

@Test
public void InitSingeBean() {
	//System.out.println(new Date());
	ApplicationContext context =  new ClassPathXmlApplicationContext("testBeanInit.xml");
	InitSingeBean initSingeBean = (InitSingeBean) context.getBean("initSingeBean");
	initSingeBean.test();
}

src/ testBeanInit.XML

 

<!-- 
		没有任何参数注入
	<bean id="initSingeBean" class="com.spring305.test.beanInit.po.InitSingeBean">
	</bean>
	 -->
	 
	 <!-- 
	 	构造参数注入,但是,要注意的是这个index(顺序)/type(类型)/value(值)的顺序,而且,这里是不支持自动装箱和拆箱的哦,int Integer,貌似不能自动转 
	 <bean id="initSingeBean" class="com.spring305.test.beanInit.po.InitSingeBean">
		<constructor-arg type="int" value="750"/>
		<constructor-arg type="Integer" value="057"/>
	</bean>
	-->
	
	<!--
	 构造参数注入2
	 <constructor-arg index="0" value="750"/>
	 <constructor-arg type="int" value="750"/>
	 2011-04-16 12:00:00  时间的注入不能写成这样子的,这种写法应该是中国cn区的写法吧。
	 包装类型的要写包装类型,加上包名也是可以的	
	 <bean id="initSingeBean" class="com.spring305.test.beanInit.po.InitSingeBean">
		<constructor-arg index="0"><value>750</value></constructor-arg>
		<constructor-arg type="java.lang.Integer" value="057"/>
		<constructor-arg type="String" value="00001测试"/>
		<constructor-arg type="java.util.Date" value="Sat Apr 16 15:20:13 CST 2011"/>
		<constructor-arg type="java.lang.Double" value="2011.0123"/>
		<constructor-arg type="float" value="2011.0321"/>
		<constructor-arg type="java.lang.Boolean" value="true"/>
	</bean>
	 -->

 

 b)、Setter-based  DI

XML

<!--
	  	setter设值注入
	 <bean id="dateBean" class="java.util.Date"/>
	 或者 <bean id="dateFormat" class="java.text.SimpleDateFormat">
		<constructor-arg value="yyyy-MM-dd" />
  	 </bean>
	 <ref bean="dateBean"/> 
	 or  <bean id="dateBean" class="java.util.Date"/> either is ok-->
	 <bean id="dateFormat" class="java.text.SimpleDateFormat">
		<constructor-arg value="yyyy-MM-dd" />
  	 </bean>
	 <bean id="initSingeBean" class="com.spring305.test.beanInit.po.InitSingeBean">
	 	<property name="id" value="23"></property>
	 	<property name="age" value="34"></property>
	 	<property name="name"><value>jdbc:mysql://localhost:3306/mydb</value></property>
	 	<property name="birth"> 
	 		<!-- <ref bean=dateBean/>  -->
	 		<bean factory-bean="dateFormat" factory-method="parse">
				<constructor-arg value="2010-01-31" />
			</bean>
	 	</property>
	 	<property name="weight" value="2011.0123"></property>
	 	<property name="height" value="23"></property>
	 	<property name="sex" value="false"></property>
	 </bean>
 <!-- 
   org.apache.commons.dbcp.BasicDataSource
   这个怎么样,不过你得先在XML头中加上 xmlns:p="http://www.springframework.org/schema/p"
  <bean id="initSingeBean" class="com.spring305.test.beanInit.po.InitSingeBean"
  p:id="123"
  p:age="345"
  p:name="dbc:mysql://localhost:3306/mydb"
  p:birth="Sat Apr 16 15:20:13 CST 2011"/>
  
  -->
  

 

到底使用哪种来注入?

Spring3官方文档:

<!--EndFragment-->

it is a good rule of thumb to use constructor arguments for mandatory dependencies and setters for optional dependencies。....The Spring team generally advocates setter injection

 关于一般属性的注解现没在文档上找到。。。估计那样也没多大意义。。。

 

分享到:
评论

相关推荐

    day38 11-Spring的Bean的属性的注入:对象属性

    通过以上内容,我们可以了解到Spring中Bean属性注入的多种方式及其背后的原理。了解并熟练运用这些技巧,能够帮助我们更有效地设计和管理Spring应用中的对象依赖关系。在实际开发中,结合源码阅读和实践,可以进一步...

    day38 17-Spring的Bean的属性注入:注解方式

    本文将详细讲解使用注解方式进行Bean属性注入的方法,以及相关的源码和工具应用。 首先,让我们了解Spring中的注解。在Spring 2.5版本之后,引入了基于注解的配置,这使得我们可以直接在类或方法上使用注解来声明...

    day38 12-Spring的Bean的属性的注入:名称空间p

    本文将深入探讨Spring中的"名称空间p",这是一种用于配置Bean属性注入的方式,特别是在XML配置文件中。我们将通过源码分析和实际例子来理解其工作原理。 ### Spring Bean属性注入 Bean属性注入主要有两种方式:`...

    day38 14-Spring的Bean的属性的注入:集合属性的注入

    在Spring框架中,Bean的属性注入是核心功能之一,它允许我们通过配置文件或注解来设置Bean的属性值,从而实现对象的依赖管理。在本主题“day38 14-Spring的Bean的属性的注入:集合属性的注入”中,我们将深入探讨...

    day38 13-Spring的Bean的属性的注入:SpEL注入

    在Spring框架中,Bean的属性注入是其核心功能之一,使得我们可以轻松地管理对象的依赖关系,无需在代码中硬编码这些依赖。本篇将详细探讨Spring中的SpEL(Spring Expression Language)注入,这是一种强大的表达式...

    Spring boot工具类静态属性注入及多环境配置详解

    Spring Boot工具类静态属性注入及多环境配置详解 Spring Boot工具类静态属性注入是指使用Spring Boot框架时,如何将配置信息注入到工具类的静态变量中,以便在程序中使用这些配置信息。这种方式可以方便地在不同的...

    Spring定义bean的三种方式和自动注入

    同时,可以通过`@Value`或`@Autowired`注解进行属性注入。 ```java @Component("teacher") public class Teacher { private String name; // ... } @Component public class Student { private String ...

    spring依赖注入bean

    Spring 框架的核心特性之一就是依赖注入(Dependency Injection,简称 DI),这是一种设计模式,它允许我们控制组件之间的耦合,而不是让组件自行创建它们所依赖的对象。这有助于提高代码的可测试性、可维护性和灵活...

    Spring (bean怎样注入值)学习实例

    在Spring框架中,Bean的注入是其核心特性之一,它允许开发者通过声明式的方式管理对象的依赖关系。本文将深入探讨如何在Spring中通过XML配置文件对Bean进行值的注入,包括List、Set和Map等集合类型的注入。 首先,...

    spring 普通属性注入

    在Spring框架中,属性注入是核心特性之一,它允许我们通过依赖注入(Dependency Injection, DI)来管理对象的属性,而不是让对象自行创建或查找它们的依赖。这有助于提高代码的可测试性、可维护性和解耦性。下面将...

    Spring boot将配置属性注入到bean类中

    在Spring Boot中,属性注入是核心特性之一,它使得我们可以方便地将配置文件中的参数值注入到Bean类的属性中,从而实现灵活的配置管理。本文将详细讲解如何利用`@ConfigurationProperties`注解以及与`@...

    Spring Bean创建初始化流程.docx

    在`doCreateBean()`方法中,Spring会创建Bean的实例,`createBeanInstance(beanName, mbd, args)`执行Bean实例的创建,而`populateBean(beanName, mbd, instanceWrapper)`则负责填充Bean的属性,将依赖注入到Bean中...

    spring bean XML配置入门

    在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...

    Spring实例化Bean顺序

    5. **InitializingBean接口**:如果Bean实现了`InitializingBean`接口,Spring会在所有必需的属性设置后调用`afterPropertiesSet()`方法。这个接口的方法调用时机晚于`@PostConstruct`注解的方法,因此实例化顺序会...

    Spring Bean的属性注入方式

    "Spring Bean的属性注入方式" Spring Bean的属性注入方式是Spring框架中一个非常重要的概念,用于将Bean的属性值注入到Bean实例中。 Spring Bean的属性注入方式有多种,包括构造器注入、Setter方法注入、集合属性...

    spring中的bean

    3. **Java配置类**:Spring 3.0引入了Java配置,允许我们使用Java类来配置Bean。 ```java @Configuration public class AppConfig { @Bean public MyBean myBean() { return new MyBean(); } } ``` 这里的`@Bean...

    spring运行过程中动态注册bean

    `BeanDefinitionBuilder`提供了简洁的API来定义一个Bean的所有属性和行为,包括它的类型、依赖注入的属性等。在这个例子中,我们创建了一个`UserService`类型的Bean定义。 ```java BeanDefinitionBuilder ...

    spring创建bean简单示例

    接下来,我们将通过一个简单的步骤来展示如何在Spring中创建Bean: 1. **定义Bean的类**: 首先,创建一个Java类,例如`MyService`,它代表一个Bean。这个类可能包含一些业务逻辑。 ```java public class ...

    详解Spring 中如何控制2个bean中的初始化顺序

    需要注意的是,bean 属性的注入是在初始化方法调用之前。因此,在使用 DependsOn 注解时,需要了解 Spring 中 bean 的加载过程,以免出现错误。 其他实现方式 除了上述两种方式外,还有其他方式可以控制 2 个 bean...

Global site tag (gtag.js) - Google Analytics