构造器方式注入
Performer.java文件:
package com.springinaction.springidol;
public interface Performer {
void perform() throws PerformanceException;
}
PerformanceException.java:
package com.springinaction.springidol; public class PerformanceException extends Exception { public PerformanceException() { } public PerformanceException(String str) { super(str); } }
一:简单值的注入
Juggler.java:这个是等会要进行注入配置的java文件,他有beanBags,name两个属性,并都有自己的默认值。
package com.springinaction.springidol; import com.springinaction.springidol.PerformanceException; import com.springinaction.springidol.Performer; public class Juggler implements Performer { private int beanBags = 3; private String name = "default"; public Juggler(int beanBags,String name) { this.beanBags = beanBags; this.name = name; } public Juggler() { } public void perform() throws PerformanceException { System.out.println(name+"--Juggling--" + beanBags +"...beanBags"); } }
接下来才是比较激动人心的时刻了,bean文件的配置,名称为spring-idol.xml文件,位置跟前面的java文件在同一个包中。
construtor-arg中的属性:name用来配置对应javabean中属性的名称,value用来配置javabean中简单属性类型的值,ref用来配置javabean中引用类型的值,index用来制定将某个值配置到javabean中构造方法对应顺序位置的值,type用来指定即将转换到javabean中的类型。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" > <bean name="duke" class="com.springinaction.springidol.Juggler"> <!-- name表示属性的名称,value为属性的值 --> <constructor-arg name="beanBags" value="13"/> <constructor-arg name="name" value="duke"/> </bean> </beans>
二:注入对象
假设Juggler类中存在一个Instructment对象
Instructment.java
package com.springinaction.springidol; public class Instructment { private String name; public Instructment(String name) { this.name = name; } public void sayName() { System.out.println("Instructment has name=" +name ); } @Override public String toString() { // TODO Auto-generated method stub return this.name; } }
Juggler.java
package com.springinaction.springidol; import com.springinaction.springidol.PerformanceException; import com.springinaction.springidol.Performer; public class Juggler implements Performer { private String name = "default"; private int beanBags = 3; private Instructment instructment; public Juggler(String name, int beanBags, Instructment instructment) { super(); this.name = name; this.beanBags = beanBags; this.instructment = instructment; } public void perform() throws PerformanceException { System.out.println(name+"--Juggling--" + beanBags +"...beanBags is show-----" + instructment); } }
spring-idol.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" > <bean name="instructment" class="com.springinaction.springidol.Instructment"> <constructor-arg name="name" value="instruct"/> </bean> <bean name="duke" class="com.springinaction.springidol.Juggler"> <constructor-arg name="beanBags" value="15"/> <constructor-arg name="name" value="duke"/> <constructor-arg name="instructment" ref="instructment"/> </bean> </beans>
三:注入集合
Juggler.java:
package com.springinaction.springidol; import java.util.Collection; public class Juggler implements Performer { private String name = "default"; private Collection<Integer> beanBags; public Juggler(String name, Collection<Integer> beanBags) { super(); this.name = name; this.beanBags = beanBags; } public void perform() throws PerformanceException { System.out.println(name+"--Juggling--" + beanBags +"...beanBags is show-----"); } }
spring-idol.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" > <bean name="duke" class="com.springinaction.springidol.Juggler"> <constructor-arg name="name" value="duke"/> <constructor-arg name="beanBags"> <list> <value>1</value> <value>2</value> <value>3</value> </list> </constructor-arg> </bean> </beans>
注:这里只是介绍了集合一种比较简单的使用方式,对于map使用方式跟list差不多,只是对应的子元素为entry,entry元素中使用key与value两个属性进行赋值;对于集合中是集合或者对象的情况可以根据xml文件的提示使用对应的方式进行赋值即可,这里不再记录了。
通过setter方式注入
Performer.java与 PerformanceException.java文件同上
一:简单值的注入
Juggler.java:
package com.springinaction.springidol; import com.springinaction.springidol.PerformanceException; import com.springinaction.springidol.Performer; public class Juggler implements Performer { private String name = "default"; private int beanBags = 3; public void perform() throws PerformanceException { System.out.println(name+"--Juggling--" + beanBags +"...beanBags"); } public void setName(String name) { this.name = name; } public void setBeanBags(int beanBags) { this.beanBags = beanBags; } }
spring-idol.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" > <bean name="duke" class="com.springinaction.springidol.Juggler"> <property name="beanBags" value="13" /> <property name="name" value="duke"/> </bean> </beans>
二:对象的注入
Instructment.java:
package com.springinaction.springidol;
public class Instructment {
private String name;
public void setName(String name) {
this.name = name;
}
public void sayName() {
System.out.println("Instructment has name=" +name );
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.name;
}
}
Juggler.java:
package com.springinaction.springidol; import com.springinaction.springidol.PerformanceException; import com.springinaction.springidol.Performer; public class Juggler implements Performer { private String name = "default"; private int beanBags = 3; private Instructment instructment; public void perform() throws PerformanceException { System.out.println(name+"--Juggling--" + beanBags +"...beanBags is show-----" + instructment); } public void setName(String name) { this.name = name; } public void setBeanBags(int beanBags) { this.beanBags = beanBags; } public void setInstructment(Instructment instructment) { this.instructment = instructment; } }
spring-idol.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" > <bean name="instructment" class="com.springinaction.springidol.Instructment"> <property name="name" value="instruct"></property> </bean> <bean name="duke" class="com.springinaction.springidol.Juggler"> <property name="beanBags" value="15" /> <property name="name" value="duke" /> <property name="instructment" ref="instructment"></property> </bean> </beans>
三:集合的注入
Juggler.java:
package com.springinaction.springidol; import java.util.Collection; import com.springinaction.springidol.PerformanceException; import com.springinaction.springidol.Performer; public class Juggler implements Performer { private String name = "default"; private Collection<Integer> beanBags; public void perform() throws PerformanceException { System.out.println(name+"--Juggling--" + beanBags +"...beanBags is show-----"); } public void setName(String name) { this.name = name; } public void setBeanBags(Collection<Integer> beanBags) { this.beanBags = beanBags; } }
spring-idol.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd" >
<bean name="duke" class="com.springinaction.springidol.Juggler">
<property name="name" value="duke" />
<property name="beanBags">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
</bean>
</beans>
到这里spring bean的xml文件注入方式基本上就记录完毕了,下面将记录bean的作用域问题。
bean的作用域
1.spring默认所有的bean都是单例的,当容器分配一个bean(不论通过装配还是调用容器的getBean方法),他总是返回bean的一个实例。那如何配置Spring让其覆盖默认的单例配置呢?
spring在bean元素中为我们提供了scope属性,通过设置这个属性的值为prototype就可以在每次请求的时候都会产生一个实例了。具体实现:
<bean name="duke" class="com.springinaction.springidol.Juggler" scope="prototype">
scope属性还有以下几个值:
singleton 在每一个Spring容器中,一个bean定义只有一个对象实例(默认)
prototype 允许bean的定义可以被实例化任意次(每次调用都会产生一个实例)
request 在一次http请求中,每个bean定义对应一个实例,该作用域仅在基于web的spring上下文(SpringMvc)中才有效
session 在一个http session中,每个bean定义对应一个实例,该作用域仅在基于web的spring上下文(SpringMvc)中才有效
global-session 在一个全局http session中,每个bean定义对应一个实例,该作用域仅在PortLet上下文中才有效
2.bean的初始化与销毁
在bean元素中可以设置bean的初始化与销毁的方法,具体的做法如下:
package com.springinaction.springidol; import java.util.Collection; import com.springinaction.springidol.PerformanceException; import com.springinaction.springidol.Performer; public class Juggler implements Performer { private String name = "default"; private Collection<Integer> beanBags; public void myInit() { System.out.println("dosomething here to init bean"); } public void myDestory() { System.out.println("dosomething here to destory bean"); } public void perform() throws PerformanceException { System.out.println(name+"--Juggling--" + beanBags +"...beanBags is show-----"); myDestory();//执行销毁当前bean } public void setName(String name) { this.name = name; } public void setBeanBags(Collection<Integer> beanBags) { this.beanBags = beanBags; } }
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd" >
<bean name="duke" class="com.springinaction.springidol.Juggler"
scope="prototype"
init-method="myInit"
destroy-method="myDestory">
<property name="name" value="duke" />
<property name="beanBags">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
</bean>
</beans>
当然还可以配置全局的初始化以及销毁bean的方法:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
default-init-method="myInit"
default-destroy-method="myDestory"
>
<bean name="duke" class="com.springinaction.springidol.Juggler"
scope="prototype">
<property name="name" value="duke" />
<property name="beanBags">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
</bean>
</beans>
测试类:
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.springinaction.springidol.PerformanceException; import com.springinaction.springidol.Performer; public class Test { public static void main(String[] args) throws PerformanceException { ApplicationContext ctx = new ClassPathXmlApplicationContext("com/springinaction/springidol/spring-idol.xml"); Performer performer = (Performer)ctx.getBean("duke"); performer.perform(); } }
相关推荐
在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...
以上是 Spring 2.5.6 学习笔记中的关键知识点,通过这些基础知识的学习,开发者可以开始构建基于 Spring 框架的应用程序。接下来,可以进一步深入学习 Spring 的高级特性,如事务管理、安全性、Web 开发等方面的知识...
这篇“Spring学习笔记(2)----实例化Bean的三种方式”着重讲解了如何在Spring应用上下文中初始化Bean。以下是这三种方式的详细说明: 1. **XML配置方式** 在早期的Spring版本中,XML配置是最常见的实例化Bean的...
在Spring框架中,自动扫描和管理Bean是一种便捷的方式,它允许开发者无需显式配置每个Bean,而是通过指定包路径来让Spring自动发现和管理Bean。本文将深入探讨这个主题,帮助你更好地理解和应用这一功能。 首先,让...
这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...
在提供的“SSH笔记-依赖、继承bean的配置”中,我们将重点讨论两种在XML配置中处理依赖和bean继承的方法:`parent`属性和`depends-on`属性。 首先,`parent`属性用于定义bean的继承关系。在Spring中,一个bean可以...
本文档记录了尚学堂Spring学习笔记的重要知识点,涵盖了Spring配置文件的设置、普通属性的注入、自定义属性编辑器、公共属性的注入、Spring注解等内容。 一、Spring配置文件的设置 在MyEclipse中编写Spring配置...
**JSF2整合Spring3——JSF学习笔记4** 在Java服务器端开发中,JavaServer Faces(JSF)和Spring框架都是重要的技术。JSF是一个用于构建用户界面的MVC(Model-View-Controller)框架,而Spring则是一个全面的企业级...
### Spring Boot 学习笔记知识点总结 #### 一、Spring发展史 - **Spring1.x时代**:在Spring1.x的时代,主要通过XML文件来配置Bean。随着项目的规模扩大,XML配置文件的数量也随之增加,这导致开发人员需要频繁地...
### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...
### Spring自学笔记-Ioc(控制反转)容器 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,用于构建企业级应用。它提供了一种轻量级的方式来管理应用程序的各种组件和服务,使得开发者能够更容易地构建...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...
在本篇Spring学习笔记中,我们将深入探讨如何利用Spring配置文件来实现面向切面编程(AOP)。面向切面编程是Spring框架的核心特性之一,它允许我们把关注点分离,将横切关注点(如日志、事务管理、权限控制等)与...
本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...
最后,“Spring学习笔记(马士兵spring视频笔记).doc”涵盖了Spring框架的关键内容。Spring是一个全面的企业级应用框架,提供了依赖注入(DI)、面向切面编程(AOP)、数据访问、Web应用、事务管理等多种功能。笔记中...
这些文档通常包括API参考、用户指南和开发者笔记,是学习和解决问题的重要资源。 为了快速搭建Spring Framework,你需要做以下几步: 1. **解压文件**:首先,解压缩"spring-framework-5.2.3.RELEASE.rar",获取所...
在Spring框架的学习中,公共属性的注入配置是一个重要的概念,它可以帮助我们实现代码的复用,提高开发效率。本文将详细解析Spring中的公共属性注入配置,并通过实例来深入理解其工作原理。 首先,我们需要理解什么...
springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...