`

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/

分享到:
评论

相关推荐

    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详解,具有一定借鉴价值,需要的朋友可以参考下

    第四章 在Ioc容器中装配Bean

    spring 3.X 企业应用 第四章 在Ioc容器中装配Bean 手机拍的图片,略有缺页

    详解Spring框架---IOC装配Bean

    本篇文章主要介绍了详解Spring框架---IOC装配Bean,提供了三种方式实例化Bean,具有一定的参考价值,有兴趣的可以了解一下。

    模拟实现Spring的IOC

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

    spring IOC实现(墨者革离)

    该代码主要用于spring IOC的实现(墨者革离),模拟一个城门叩问的编剧场景

    Spring IOC装配Bean过程解析

    主要介绍了Spring IOC装配Bean过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    go-spring:基于IoC的Go一级一站式开发框架:rocket:

    Go-Spring的愿景是让Go程序员也能用上如Java Spring那般威力强大的编程框架。...在Go中,对象(即指针),数组,地图,函数指针,这些都是Bean,都可以放到IoC容器里。常用的Java Spring注解对应的Go

    尚硅谷佟刚Spring4代码及PPT.rar

    代码及ppt涵盖 Spring4.0 的所有核心内容:在 Eclipse 中安装 SpringIDE 插件、IOC & DI、在 Spring 中配置 Bean、自动装配、Bean 之间的关系(依赖、继承)、Bean 的作用域、使用外部属性文件、SpEL、管理 Bean 的...

    Spring中Bean的讲解

    文章目录一.Bean的简介二.Bean相关配置三.自动装配四.Bean的生命周期 一.Bean的简介 Spring 官方文档对 bean 的解释是: In Spring, the objects that form the backbone of your application and that are managed...

    java面试Spring.pdf

    1. Spring 介绍 ...Spring中bean的作用域 说一下Spring基于xml注入bean的几种方式? Spring如何解决循环依赖问题? Spring的自动装配 Spring框架中都用到了哪些设计模式? Spring框架中有哪些不同类型的事件?

    吴天雄--Spring笔记.doc

    第一天内容:Spring框架简介(EJB、JMX、Spring核心功能、Spring模块详解、Spring重要概念(容器)、Spring容器初始化的整个流程、Spring后处理器),IOC详解,Spring环境搭建,Spring创建Bean的三种方式,scope属性...

    HelloSpring.zip

    我的博客中“maven环境搭建及Spring入门”的项目代码。在idea中运行成功。 1。创建IOC容器 2。通过xml装配对象 【简单类型用value、复杂(引用类型)用ref、数组,集合,Map的装配】 3。IOC容器获取bean的方式 * ...

    spring.doc

    3.1 SpringIOC 8 3.2别名Alias 11 别名拓展: 11 3.3 Spring容器内部对象的创建 12 Spring容器内部对象创建拓展: 12 3.3.1使用类构造器实例化(默认无参数) 14 3.3.2使用静态工厂方法实例化(简单工厂模式) 14 3.3.3...

    25个经典的Spring面试问答

    请举例说明如何在Spring中注入一个Java Collection 如何向Spring Bean中注入一个JavautilProperties 请解释Spring Bean的自动装配 请解释自动装配模式的区别 如何开启基于注解的自动装配 请举例解释Required ...

    spring的详细介绍

    Spring介绍 1. Spring ...8. Spring中Bean实例的设计 9. 创建Bean实例的时间 10. 自动装配(不建议使用) 11. 依赖检查 12. 定义IoC容器管理的javabean的生命周期回调方法 13. 接口FactoryBean的使用

    spring-beans.zip

    它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中&lt;bean/&gt; 的形式定义。Spring 框架定义的beans都是单件beans。在bean tag中有个属性”singleton”,如果它被赋为...

    ssmDemo.rar

    IDEA项目源码,ssm项目包含数据库,sql文件,免费使用,分享给大家,资源共享,Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目...

    spring-learn:Spring轻松学习demo

    byType在容器中查找指定属性类型进行装配-set注入 构造函数与byType类似-构造方法注入 5.豆的注解 @Autowired可以注解列表和地图; @Order(1)更改注解顺序,list中有效 @Qualifier(“ beanServi

    Spring Framework API文档

    它是一个基于IOC和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了...

Global site tag (gtag.js) - Google Analytics