<?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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.sjf.bean"></context:component-scan></beans>
package com.sjf.bean;import org.springframework.context.annotation.Configuration;/*** 基于Java的配置* @author sjf0115**/@Configurationpublic class SpringConfig {// Bean declaration methods}
package com.sjf.bean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/*** 基于Java的配置* @author sjf0115**/@Configurationpublic class SpringConfig {// Bean declaration methods@Beanpublic Student studentBean(){return new Student();}}
<bean id = "studentBean" class = "com.sjf.bean.Student"></bean>
|
在XML配置中,Bean的类型和ID都是由Spring属性来表示的。Spring标识符的缺点是它们无法进行编译器检查。在Spring的基于Java的配置中并没有String属性。Bean的ID和类型都被视为方法签名的一部分。Bean的实际创建是在方法体中定义的。因为它们全都是Java代码,所以我们可以进行编译器检查确保Bean的类型是合法类型,并且Bean的ID是唯一的。 |
@Beanpublic Student studentBean(){return new Student("yoona",24);}
@Beanpublic Student studentBean(){Student stu = new Student();stu.setName("yoona");stu.setAge(24);return stu;}
@Beanpublic School schoolBean(){School school = new School();school.setName("西安电子科技大学");school.setLocation("西安");return school;}
@Beanpublic Student yoonaStudent(){return new Student(schoolBean());}
|
在Spring的Java配置中,通过声明方法引用一个Bean并不等于等于调用该方法。如果真这样,每次调用schoolBean(),都将得到该Bean的一个新的实例。通过使用@Bean注解标注schoolBean()方法,会告知Spring我们希望该方法定义的Bean要被注册进Spring的应用上下文中。因此,其他Bean的声明方法中运用这个方法时,Spring都会拦截该方法的调用,并尝试在应用上下文中查找该Bean,而不是让方法创建一个新的实例。 |
package com.sjf.bean;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Test {private static ApplicationContext context;public static void main(String[] args){context = new AnnotationConfigApplicationContext(SpringConfig.class);Student student = (Student)context.getBean("yoonaStudent");student.setName("yoona");student.setAge(24);System.out.println(student.toString());}}
参考:《Spring实战》
[Spring实战系列](15)使用Spring基于Java的配置
原文:http://blog.csdn.net/sunnyyoona/article/details/50650413