`

spring日记(三):在Ioc中装配Bean

阅读更多

JavaBean允许大写字母起头的属性变量名,不过必须满足:变量的前两个字母要么全部大写,要么全部小写。比如IDCode,idCode是合法的,尽量用小写的。

》通过构造函数注入:

<!--构造函数注入:type -->
<bean id="car1" class="com.baobaotao.ditype.Car">
	<constructor-arg type="java.lang.String">
		<value>红旗CA72</value>
	</constructor-arg>
	<constructor-arg type="double">
		<value>20000</value>
	</constructor-arg>
</bean>
<!--构造函数注入:type&index,这个最优 -->
<bean id="car3" class="com.baobaotao.ditype.Car">
	<constructor-arg index="0" type="java.lang.String">
		<value>红旗CA72</value>
	</constructor-arg>
	<constructor-arg index="1" type="java.lang.String">
		<value>中国一汽</value>
	</constructor-arg>
	<constructor-arg index="2" type="int">
		<value>200</value>
	</constructor-arg>
</bean>

循环依赖问题:如果两个Bean都通过构造函数注入,并且在构造函数中互相引用对方,那么会出现死锁情况,这种情况下,只能修改构造函数注入方法,改成属性输入。

注入参数详解:

一般来讲,基本数据类型及其封装类、String等类型可以采用字面值注入,就是<value>元素,Spring容器在内部为字面值提供了编辑器,可以将字符串表示的字面值转换为内部变量的相应类型。spring允许用户注册自定义的编辑器,以处理其他类型属性注入时的转换工作。

<bean id="car" class="com.baobaotao.attr.Car" lazy-init="default">
	<property name="brand">
		<value>
			<![CDATA[红旗&CA72]]>
		</value>
	</property>
	<property name="maxSpeed">
		<value>200</value>
	</property>
	<property name="price" value="2000.00" />
</bean>

看到了那个brand属性的字面值没?那是一个特殊的XML符号,<![CDATA[....]]>的作用是让解析器将里面的东东当做普通文本对待,不要解析了,不过这个只能用在<value></value>元素中,如果是直接用简化方式,比如<property name="speed", value="aaa&amp;bb">,只能用后面的转移字符了。或者使用特殊实体符号:<(&lt;)、>(&gt;)&(&amp;)、"(&quot;)、'(&apos;),注意,value里面的空格会连带一起付给这个属性,所以最好不要加空格换行啥的。

现在最优雅的配置方式是使用p命名空间:

<bean id="boss2" class="com.baobaotao.fb.Boss"
       p:name="John" p:car-ref="car2"/>

lookup方法注入(CGLib实现):

适用场景为希望通过一个singleton Bean 获取一个prototype Bean的时候,每次调用方法获取的对象都不一样:

public interface MagicBoss {
    Car getCar();
}

 

<bean id="car" class="com.baobaotao.auto.Car" scope="singleton">
    <property name="brand" value="红旗CA72"/>
    <property name="price" value="2000"/>
</bean> 
<bean id="magicBoss" class="com.baobaotao.auto.MagicBoss">
    <lookup-method name="getCar" bean="car"/>
</bean>

》基于注解的配置:

@Component、@Repository(对DAO)、@Service、@Controller标注POJO类,然后在spring配置文件中引入context命名空间,pom中引入对于的jar包依赖,然后开始扫描:

<context:component-scan base-package="com.springzoo.anno"/>
<context:component-scan base-package="com.springzoo" resource-pattern="anno/*.class"/ >
<context:component-scan base-package="com.springzoo">
       <context:include-filter type="regex" expression="com\.springzoo\.anno.*Dao"/>
       <context:include-filter type="regex" expression="com\.springzoo\.anno.*Service"/>
       <context:exclude-filter type="aspectj" expression="com.springzoo..*Controller+"/>
   </context:component-scan>
所有这些过滤中,aspectj的过滤表达能力最强,它可以轻易实现其他类型所能表达的过滤规则。
》使用@Autowired进行自动注入
package com.baobaotao.anno;
 
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
 
@Service
public class LogonService implements BeanNameAware{
    @Autowired(required=false)
    private LogDao logDao;
    @Autowired
    @Qualifier("userDao")
    private UserDao userDao;
}

一般原则:采用XML配置DataSource、SessionFactory等资源Bean,在XML中利用aop、context命名空间进行相关主题的配置。其他所有项目中开发的Bean,都通过基于注解配置的方式进行配置,即整个项目采用“基于XML+基于注解”的配置方式,很少采用基于Java类的配置方式。

 

本人博客已搬家,新地址为:http://yidao620c.github.io/

分享到:
评论

相关推荐

    实验一:Spring IoC中Bean的装置的jar包

    本实验聚焦于Spring IoC中的Bean装置,这是理解Spring框架核心机制的关键。我们将通过分析指定的"实验一:Spring IoC中Bean的装置的jar包"来深入探讨相关知识点。 首先,让我们明确什么是Spring IoC。IoC,全称为...

    springIOC核心组件分析.vsdx

    spring-beans:Bean工厂与装配 spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 spring-context-indexer:类管理组件和Classpath扫描 spring-expression:表达式语句 切面编程: ...

    spring IOC反射装载bean

    在这个特定的"spring IOC反射装载bean"的主题中,我们将深入探讨Spring如何通过XML配置文件来加载和管理Bean,并利用Java的反射机制来实例化这些Bean。 首先,Spring容器通过读取XML配置文件来获取Bean的定义。这些...

    第四章 在Ioc容器中装配Bean

    在探讨Spring 3.X企业应用开发过程中,第四章的内容聚焦于如何在Spring框架的核心组件——IoC(控制反转)容器中装配Bean。在Spring框架中,Bean装配是指Spring容器将应用程序中的对象进行实例化、配置以及组装的...

    spring在IoC容器中装配Bean详解

    Spring 在 IoC 容器中装配 Bean 详解 Spring 框架中的 IoC 容器是一个核心组件,它提供了 Bean 的装配、管理和依赖注入等功能。在 Spring 框架中,IoC 容器是 Bean 的容器,负责创建、管理和装配 Bean。在本文中,...

    实现Spring那样的Ioc注解装配

    在Java开发中,Spring框架因其强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)特性而广受欢迎。本文将深入探讨如何实现一个类似于Spring的IoC注解装配机制。 IoC是...

    Spring源代码解析(一):IOC容器.doc

    Spring框架的IOC(Inversion of Control,控制反转)容器是其核心组件,它负责管理和装配应用中的对象。在Spring源代码解析的第一部分,我们将聚焦于IOC容器,特别是BeanFactory接口,它是所有Spring容器的基础。 ...

    模拟Spring的IoC容器实现注解自动装配

    在Spring框架中,IoC(Inversion of Control)容器是其核心特性之一,它负责管理对象的生命周期和依赖关系。IoC容器通过控制反转的概念,将对象的创建和依赖关系的配置从应用代码中分离出来,使代码更加灵活、可测试...

    spring ioc和aop原理流程图(详细)

    1. **Bean的定义**:在Spring中,业务对象被称为Bean。Bean定义包含了创建和管理Bean的所有信息,如类名、属性值、依赖关系等,通常通过XML、注解或Java配置来定义。 2. **容器初始化**:当Spring容器启动时,会...

    SpringIoc示例代码

    而在Spring IOC中,这种控制权被反转,对象的创建、初始化、依赖关系的装配等都交给了Spring容器来管理。这一设计模式使得应用程序的组件解耦,提高了代码的可测试性和可维护性。 首先,让我们了解一下Spring IOC的...

    模拟实现Spring的IOC

    2、本工程,模拟实现Spring的IOC,将xml中配置的Bean读入到Spring容器中,并在测试用例中调用Spring容器中的bean。 3、开发环境eclipse,jdk1.6。使用第三方jar包有:jdom.jar(用于解析xml文件),junit-4.4.jar...

    Spring整合Mybatis+SpringIOC

    在Spring配置文件中,通过`&lt;bean&gt;`标签定义一个Bean,设置其类名、属性等。例如: ```xml &lt;bean id="userService" class="com.example.UserService"&gt; &lt;/bean&gt; ``` 4. **自动装配** Spring提供了一些自动...

    Spring-ioc-jar

    这些配置告诉Spring如何创建、初始化和装配Bean。 2. **容器初始化**: 创建一个`ApplicationContext`或`BeanFactory`实例,加载配置信息。这一步会解析配置文件,生成Bean定义,并构建Bean的依赖图谱。 3. **Bean...

    springioc的详细讲解

    在Spring框架中,IOC容器是整个应用的中心,它负责初始化、配置和管理所有Bean的生命周期。以下是对Spring IOC容器的详细讲解: 1. **Bean的定义**:在Spring中,我们通过XML、Java配置或者基于注解的方式定义Bean...

    Spring2的IOC利器统管Bean世界.rar

    `@Component`注解用于标记一个类为Spring Bean,而`@Autowired`则用于自动装配Bean的依赖。这种方式使得代码更加简洁,同时也更易于理解和维护。 此外,Spring的IOC容器还提供了许多高级特性,比如作用域(Scope)...

    spring_IoC:Spring IoC 演示

    在本演示中,我们将深入探讨Spring IoC的工作原理和使用方法。** ### Spring IoC简介 IoC,即控制反转,其核心思想是将对象的创建权交给框架,而不是由对象自身来创建。在Spring中,IoC通过依赖注入(Dependency ...

    模拟Spring的IOC

    在Spring中,通过配置文件或注解来声明对象及其依赖关系,容器负责实例化、装配这些对象并管理它们的生命周期。 **2. 依赖注入(DI)** 依赖注入是实现IOC的一种方式,它允许对象在运行时动态地获得依赖的对象,而...

    Spring核心学习IOC部分

    在Spring的IOC中,Bean的定义通常通过XML配置文件进行,其中包含了Bean的类名、属性、依赖关系等信息。例如: ```xml &lt;bean id="exampleBean" class="com.example.ExampleClass"&gt; &lt;/bean&gt; ``` 这里的`id`是Bean...

    spring IOC实现(墨者革离)

    在这个名为"spring_IOC实现(墨者革离)"的项目中,我们可以通过模拟城门叩问的编剧场景来理解这一概念。 首先,控制反转的基本思想是将对象的创建和依赖关系的管理从应用程序中分离出来,交给一个外部容器(在...

Global site tag (gtag.js) - Google Analytics