Spring:注解版依赖注入+注入collection值演示
2012-05-26 16:45
417 查看
加载的jar有:
log4j-1.2.16.jar
org.springfaramework.asm-3.0.5.release.jar
org.springfaramework.beans-3.0.5.release.jar
org.springfaramework.context-3.0.5.release.jar
org.springfaramework.core-3.0.5.release.jar
org.springfaramework.expression-3.0.5.release.jar
asm-all.3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
文件结构图如下:
代码演示如下:
[b][b]MyDao.java[/b]
[/b]
package org.baicai.spring.annotation;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.stereotype.Component;
//标注组件
@Component
public class MyDao {
public MyDao()
{
System.out.println("in MyDao");
}
//标注生命同期方法(初始化)
@PostConstruct
public void init()
{
System.out.println("in MyDao init() ");
}
public void say(String name)
{
System.out.println(name+":你好!");
}
//标注生命周期方法(销毁)
@PreDestroy
public void close()
{
System.out.println("in MyDao close() ");
}
}
MyService.java
package org.baicai.spring.annotation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//标注服务组件
@Service
public class MyService {
//配置依赖注入
@Autowired(required=true)
public MyDao dao;
public MyService()
{
System.out.println("in MyService()");
}
public MyDao getDao()
{
return dao;
}
public void setDao(MyDao dao)
{
this.dao=dao;
}
public void say(String name)
{
dao.say(name);
}
}
[b]Demo.java[/b]
package org.baicai.spring.annotation;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Demo {
public static void main(String[] args)
{
AnnotationConfigApplicationContext context= new AnnotationConfigApplicationContext();
context.registerShutdownHook();
//自动扫描包里面的class 多个用,分开
context.scan("org.baicai.spring.annotation");
System.out.println("==========================================");
//更新context状态
context.refresh();
System.out.println("==========================================");
MyService service=context.getBean(MyService.class);
service.say("Annotation");
service.say("张三");
}
}
[b]Bean
.java
[/b]
package org.baicai.spring.collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class Bean {
private List<String> list;
private Properties properties;
private Map<String, String> map;
private Date date;
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public void showInfo() {
System.out.printf("list:%s%nproperties:%s%nmap:%s%ndate:%s%n", list,
properties, map, date);
}
}
[b]BeanOne
.java
[/b]
package org.baicai.spring.collection;
public class BeanOne {
}
[b]BeanTwo
.java
[/b]
package org.baicai.spring.collection;
public class BeanTwo {
private BeanOne beanOne;
public void setBeanOne(BeanOne beanOne)
{
this.beanOne=beanOne;
}
public BeanOne getBeanOne()
{
return beanOne;
}
public void showBeanOne()
{
System.out.println(getBeanOne());
}
}
MyPropertyEditor.java
package org.baicai.spring.collection;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class MyPropertyEditor extends PropertyEditorSupport {
private SimpleDateFormat sdf=new SimpleDateFormat();
private String format;
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
sdf.applyPattern(format);
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
try {
setValue(sdf.parse(text));
} catch (ParseException e) {
throw new IllegalArgumentException();
}
}
}
context.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 注册属性编辑器(类型转换) -->
<bean id="datePropertyEditor" class="org.baicai.spring.collection.MyPropertyEditor">
<property name="format" value="yyyy-MM-dd"></property>
</bean>
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<!-- 注册java.util.Date类型由dataPropertyEditor负责转换 -->
<entry key="java.util.Date" value-ref="datePropertyEditor"></entry>
</map>
</property>
</bean>
<!-- List集合对象 -->
<bean id="list" class="java.util.ArrayList">
<constructor-arg index="0">
<list>
<value>one</value>
<value>two</value>
<value>three</value>
</list>
</constructor-arg>
</bean>
<!-- 集合以及特殊字段的注入(p:属性注入方式是xmlns:p="http://www.springframework.org/schema/p"提供的功能) -->
<bean id="bean" class="org.baicai.spring.collection.Bean" p:date="1991-01-01">
<property name="list" ref="list"></property>
<property name="properties">
<props>
<prop key="one">一</prop>
<prop key="two">二</prop>
<prop key="three">三</prop>
<prop key="four">四</prop>
</props>
</property>
<property name="map">
<map>
<entry key="Michael" value="米迦勒(天使名),迈克尔(人名)"></entry>
<entry key="Control" value="控制"></entry>
</map>
</property>
</bean>
<!-- scope默认为单例(singleton)应用程序每次调用的都是同一个Bean prototype 每调用一次Bean对象都会重新产生 -->
<bean id="beanOne" class="org.baicai.spring.collection.BeanOne" scope="prototype"/>
<bean id="beanTwo" class="org.baicai.spring.collection.BeanTwo" >
<!-- 普通版本
<property name="beanOne" ref="beanOne"/>
-->
<!-- 方法注入版本 -->
<lookup-method bean="beanOne" name="getBeanOne"/>
</bean>
</beans>
执行结果如下:
log4j-1.2.16.jar
org.springfaramework.asm-3.0.5.release.jar
org.springfaramework.beans-3.0.5.release.jar
org.springfaramework.context-3.0.5.release.jar
org.springfaramework.core-3.0.5.release.jar
org.springfaramework.expression-3.0.5.release.jar
asm-all.3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
文件结构图如下:
代码演示如下:
[b][b]MyDao.java[/b]
[/b]
package org.baicai.spring.annotation;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.stereotype.Component;
//标注组件
@Component
public class MyDao {
public MyDao()
{
System.out.println("in MyDao");
}
//标注生命同期方法(初始化)
@PostConstruct
public void init()
{
System.out.println("in MyDao init() ");
}
public void say(String name)
{
System.out.println(name+":你好!");
}
//标注生命周期方法(销毁)
@PreDestroy
public void close()
{
System.out.println("in MyDao close() ");
}
}
MyService.java
package org.baicai.spring.annotation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//标注服务组件
@Service
public class MyService {
//配置依赖注入
@Autowired(required=true)
public MyDao dao;
public MyService()
{
System.out.println("in MyService()");
}
public MyDao getDao()
{
return dao;
}
public void setDao(MyDao dao)
{
this.dao=dao;
}
public void say(String name)
{
dao.say(name);
}
}
[b]Demo.java[/b]
package org.baicai.spring.annotation;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Demo {
public static void main(String[] args)
{
AnnotationConfigApplicationContext context= new AnnotationConfigApplicationContext();
context.registerShutdownHook();
//自动扫描包里面的class 多个用,分开
context.scan("org.baicai.spring.annotation");
System.out.println("==========================================");
//更新context状态
context.refresh();
System.out.println("==========================================");
MyService service=context.getBean(MyService.class);
service.say("Annotation");
service.say("张三");
}
}
[b]Bean
.java
[/b]
package org.baicai.spring.collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class Bean {
private List<String> list;
private Properties properties;
private Map<String, String> map;
private Date date;
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public void showInfo() {
System.out.printf("list:%s%nproperties:%s%nmap:%s%ndate:%s%n", list,
properties, map, date);
}
}
[b]BeanOne
.java
[/b]
package org.baicai.spring.collection;
public class BeanOne {
}
[b]BeanTwo
.java
[/b]
package org.baicai.spring.collection;
public class BeanTwo {
private BeanOne beanOne;
public void setBeanOne(BeanOne beanOne)
{
this.beanOne=beanOne;
}
public BeanOne getBeanOne()
{
return beanOne;
}
public void showBeanOne()
{
System.out.println(getBeanOne());
}
}
MyPropertyEditor.java
package org.baicai.spring.collection;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class MyPropertyEditor extends PropertyEditorSupport {
private SimpleDateFormat sdf=new SimpleDateFormat();
private String format;
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
sdf.applyPattern(format);
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
try {
setValue(sdf.parse(text));
} catch (ParseException e) {
throw new IllegalArgumentException();
}
}
}
context.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 注册属性编辑器(类型转换) -->
<bean id="datePropertyEditor" class="org.baicai.spring.collection.MyPropertyEditor">
<property name="format" value="yyyy-MM-dd"></property>
</bean>
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<!-- 注册java.util.Date类型由dataPropertyEditor负责转换 -->
<entry key="java.util.Date" value-ref="datePropertyEditor"></entry>
</map>
</property>
</bean>
<!-- List集合对象 -->
<bean id="list" class="java.util.ArrayList">
<constructor-arg index="0">
<list>
<value>one</value>
<value>two</value>
<value>three</value>
</list>
</constructor-arg>
</bean>
<!-- 集合以及特殊字段的注入(p:属性注入方式是xmlns:p="http://www.springframework.org/schema/p"提供的功能) -->
<bean id="bean" class="org.baicai.spring.collection.Bean" p:date="1991-01-01">
<property name="list" ref="list"></property>
<property name="properties">
<props>
<prop key="one">一</prop>
<prop key="two">二</prop>
<prop key="three">三</prop>
<prop key="four">四</prop>
</props>
</property>
<property name="map">
<map>
<entry key="Michael" value="米迦勒(天使名),迈克尔(人名)"></entry>
<entry key="Control" value="控制"></entry>
</map>
</property>
</bean>
<!-- scope默认为单例(singleton)应用程序每次调用的都是同一个Bean prototype 每调用一次Bean对象都会重新产生 -->
<bean id="beanOne" class="org.baicai.spring.collection.BeanOne" scope="prototype"/>
<bean id="beanTwo" class="org.baicai.spring.collection.BeanTwo" >
<!-- 普通版本
<property name="beanOne" ref="beanOne"/>
-->
<!-- 方法注入版本 -->
<lookup-method bean="beanOne" name="getBeanOne"/>
</bean>
</beans>
执行结果如下:
相关文章推荐
- spring下应用@Resource, @Autowired 和 @Inject注解进行依赖注入的差
- Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea
- Spring-Context的注解实现依赖注入功能
- Spring依赖注入:注解注入总结
- Spring 依赖注入 + 装配Bean + 注解 + profile + 加载properties文件
- Spring零配置通过注解实现Bean依赖注入总结<转>
- Spring依赖注入的简单示例(基于注解配置)
- 【第十二章】零配置 之 12.1 概述 12.2 注解实现Bean依赖注入 ——跟我学spring3
- Spring依赖注入:注解注入总结
- 使用spring注解方式实现组件的声明,并且用注解注入方式解决依赖关系
- day01-spring2.5.5中使用“依赖注入的注解”
- 原始方式:spring四种依赖注入方式 |注解方式:Spring零配置通过注解实现Bean依赖注入
- Spring学习(1):控制反转(IoC)和依赖注入(DI)的详解以及注解(annotation)开发入门案例
- spring使用注解进行DI(依赖)注入
- 详解Java Spring各种依赖注入注解的区别
- 框架 day36 Spring3 入门,DI依赖注入,装配bean基于xml/注解, 整合Junit4,配置约束自动提示
- Spring各种依赖注入注解的区别
- spring-依赖注入的注解配置
- Spring_4_注解的方法依赖注入
- 【第十二章】零配置 之 12.2 注解实现Bean依赖注入 ——跟我学spring3