1 组件注册
1.1 @Configuration&@Bean注册Bean
1.1.1 传统的xml方式


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Person {private String name;private Integer age;public Person() {
- }public Person(String name, Integer age) {this.name = name;this.age = age;
- }public String getName() {return name;
- }public void setName(String name) {this.name = name;
- }public Integer getAge() {return age;
- }public void setAge(Integer age) {this.age = age;
- }
-
- @Overridepublic String toString() {return "Person{" +
- "name='" + name + '\'' +
- ", age=" + age +
- '}';
- }
- }
- <?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" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"><bean id="person" class="com.xuweiwei.spring.model.Person"><property name="name" value="许威威"/><property name="age" value="27"/></bean></beans>


- package com.xuweiwei.sping;import com.xuweiwei.spring.model.Person;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations = "classpath*:applicationContext.xml")public class SpringTest {
- @Autowiredprivate Person person;
-
-
- @Testpublic void test(){
- System.out.println(person);
- }
-
- }
1.1.2 注解方式


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Person {private String name;private Integer age;public Person() {
- }public Person(String name, Integer age) {this.name = name;this.age = age;
- }public String getName() {return name;
- }public void setName(String name) {this.name = name;
- }public Integer getAge() {return age;
- }public void setAge(Integer age) {this.age = age;
- }
-
- @Overridepublic String toString() {return "Person{" +
- "name='" + name + '\'' +
- ", age=" + age +
- '}';
- }
- }
- package com.xuweiwei.spring.config;import com.xuweiwei.spring.model.Person;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 *///配置类==配置文件//告诉Spring这是一个配置类@Configuration //相当于applicationContext.xmlpublic class MainConfig {/** * @Bean 注解相当于bean标签
- *
- * @return */@Beanpublic Person person() {return new Person("许威威", 27);
- }
-
- }


- package com.xuweiwei.sping;import com.xuweiwei.spring.config.MainConfig;import com.xuweiwei.spring.model.Person;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class ConfigurationSpringTest {
-
- @Testpublic void test() {
- ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
-
- Person person = context.getBean(Person.class);
- System.out.println(person);
-
- String[] names = context.getBeanDefinitionNames();for (String name : names) {
- System.out.println(name);
- }
-
- }
-
- }
1.2 @ComponentScan自动扫描
1.2.1 传统的xml方式


- package com.xuweiwei.spring.controller;import org.springframework.stereotype.Controller;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */@Controllerpublic class PersonController {
- }


- package com.xuweiwei.spring.service;import org.springframework.stereotype.Service;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */@Servicepublic class PersonService {
- }


- package com.xuweiwei.spring.dao;import org.springframework.stereotype.Repository;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */@Repositorypublic class PersonDao {
- }
- <?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" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"><!--只要标注了@Controller、@Service、@Component、@Repository注解的都会自动注入到IOC容器中--><context:component-scan base-package="com.xuweiwei.spring"></context:component-scan></beans>


- package com.xuweiwei.sping;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations = "classpath*:applicationContext.xml")public class SpringTest {
- @Autowiredprivate ApplicationContext context;
-
- @Testpublic void test(){
- String[] names = context.getBeanDefinitionNames();for (String name : names) {
- System.out.println(name);
- }
- }
- }
1.2.2 注解方式


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Person {private String name;private Integer age;public Person() {
- }public Person(String name, Integer age) {this.name = name;this.age = age;
- }public String getName() {return name;
- }public void setName(String name) {this.name = name;
- }public Integer getAge() {return age;
- }public void setAge(Integer age) {this.age = age;
- }
-
- @Overridepublic String toString() {return "Person{" +
- "name='" + name + '\'' +
- ", age=" + age +
- '}';
- }
- }


- package com.xuweiwei.spring.dao;import org.springframework.stereotype.Repository;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */@Repositorypublic class PersonDao {
- }


- package com.xuweiwei.spring.service;import org.springframework.stereotype.Service;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */@Servicepublic class PersonService {
- }


- package com.xuweiwei.spring.controller;import org.springframework.stereotype.Controller;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */@Controllerpublic class PersonController {
- }
- package com.xuweiwei.spring.config;import com.xuweiwei.spring.model.Person;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 *///配置类==配置文件//告诉Spring这是一个配置类@Configuration //相当于applicationContext.xml@ComponentScan(value = "com.xuweiwei")public class MainConfig {/** * @Bean 注解相当于bean标签
- *
- * @return */@Beanpublic Person person() {return new Person("许威威", 27);
- }
-
- }


- package com.xuweiwei.sping;import com.xuweiwei.spring.config.MainConfig;import com.xuweiwei.spring.model.Person;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class ConfigurationSpringTest {
-
- @Testpublic void test() {
- ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
-
- Person person = context.getBean(Person.class);
- System.out.println(person);
-
- String[] names = context.getBeanDefinitionNames();for (String name : names) {
- System.out.println(name);
- }
-
- }
-
- }
- <?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" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"><!--只要标注了@Controller、@Service、@Component、@Repository注解的都会自动注入到IOC容器中,默认扫描全部--><context:component-scan base-package="com.xuweiwei.spring" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan></beans>
- package com.xuweiwei.spring.config;import com.xuweiwei.spring.model.Person;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.FilterType;import org.springframework.stereotype.Controller;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 *///配置类==配置文件//告诉Spring这是一个配置类@Configuration //相当于applicationContext.xml@ComponentScan(
- value = "com.xuweiwei",
- useDefaultFilters = false,
- includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class)}
- )public class MainConfig {/** * @return * @Bean 注解相当于bean标签 */@Beanpublic Person person() {return new Person("许威威", 27);
- }
-
- }
1.3 @Scope注解
- package com.xuweiwei.spring.config;import com.xuweiwei.spring.model.Person;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Scope;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 *///配置类==配置文件//告诉Spring这是一个配置类@Configuration //相当于applicationContext.xmlpublic class MainConfig {/** * * @see ConfigurableBeanFactory#SCOPE_PROTOTYPE
- * * @see ConfigurableBeanFactory#SCOPE_SINGLETON
- * * @see org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST
- * * @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION
- * 默认情况下,是singleton
- *
- * singleton是单例
- * prototype是多例
- * request同一次请求创建一个实例
- * session同一个Session创建一个实例
- * @return */@Scope(value = "singleton")
- @Beanpublic Person person() {return new Person("许威威", 27);
- }
-
- }


- package com.xuweiwei.sping;import com.xuweiwei.spring.config.MainConfig;import com.xuweiwei.spring.model.Person;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class ConfigurationSpringTest {
-
- @Testpublic void test() {
- ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
-
- Person person1 = context.getBean(Person.class);
- Person person2 = context.getBean(Person.class);
- System.out.println(person1 == person2);
- }
-
- }
1.4 @Lazy注解
- package com.xuweiwei.spring.config;import com.xuweiwei.spring.model.Person;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Lazy;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 *///配置类==配置文件//告诉Spring这是一个配置类@Configuration //相当于applicationContext.xmlpublic class MainConfig {/** * 懒加载:容器启动的时候不创建对象,而是在第一次使用的时候,才创建对象
- * @return */@Lazy
- @Beanpublic Person person() {
- System.out.println("给容器中注入Bean^_^ ^_^ ^_^ ^_^");return new Person("许威威", 27);
- }
-
- }
1.5 @Conditional注解
- package com.xuweiwei.spring.condition;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.env.Environment;import org.springframework.core.type.AnnotatedTypeMetadata;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class LinuxCondition implements Condition {
- @Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
- Environment environment = context.getEnvironment();
- String property = environment.getProperty("os.name");if(property.contains("linux")){return true;
- }return false;
- }
- }
- package com.xuweiwei.spring.condition;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.env.Environment;import org.springframework.core.type.AnnotatedTypeMetadata;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class WindowsCondition implements Condition {
- @Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
- Environment environment = context.getEnvironment();
- String property = environment.getProperty("os.name");if(property.contains("Windows")){return true;
- }return false;
- }
- }
- package com.xuweiwei.spring.config;import com.xuweiwei.spring.condition.LinuxCondition;import com.xuweiwei.spring.condition.WindowsCondition;import com.xuweiwei.spring.model.Person;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Conditional;import org.springframework.context.annotation.Configuration;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */@Configurationpublic class MainConfig2 {
-
- @Conditional(value = WindowsCondition.class)
- @Bean("bill")public Person person1(){return new Person("比尔盖茨",60);
- }
-
- @Conditional(value = LinuxCondition.class)
- @Bean("linus")public Person person2(){return new Person("林纳斯",50);
- }
-
- }


- package com.xuweiwei.sping;import com.xuweiwei.spring.config.MainConfig2;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class ConfigurationSpringTest {
-
- @Testpublic void test() {
- ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig2.class);
- String[] names = context.getBeanDefinitionNames();for (String name : names) {
- System.out.println(name);
- }
- }
-
- }
1.6 @Import注解


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Color {
- }


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Person {private String name;private Integer age;public Person() {
- }public Person(String name, Integer age) {this.name = name;this.age = age;
- }public String getName() {return name;
- }public void setName(String name) {this.name = name;
- }public Integer getAge() {return age;
- }public void setAge(Integer age) {this.age = age;
- }
-
- @Overridepublic String toString() {return "Person{" +
- "name='" + name + '\'' +
- ", age=" + age +
- '}';
- }
- }
- package com.xuweiwei.spring.config;import com.xuweiwei.spring.model.Color;import com.xuweiwei.spring.model.Person;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Import;import org.springframework.context.annotation.Lazy;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 *///配置类==配置文件//告诉Spring这是一个配置类@Import(value = Color.class)
- @Configuration //相当于applicationContext.xmlpublic class MainConfig {/** * 懒加载:容器启动的时候不创建对象,而是在第一次使用的时候,才创建对象
- * @return */@Lazy
- @Beanpublic Person person() {
- System.out.println("给容器中注入Bean^_^ ^_^ ^_^ ^_^");return new Person("许威威", 27);
- }
-
- }


- package com.xuweiwei.sping;import com.xuweiwei.spring.config.MainConfig;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class ConfigurationSpringTest {
-
- @Testpublic void test() {
- ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
- String[] names = context.getBeanDefinitionNames();for (String name : names) {
- System.out.println(name);
- }
- }
-
- }


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Color {
- }


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Red {
- }


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Blue {
- }


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Person {private String name;private Integer age;public Person() {
- }public Person(String name, Integer age) {this.name = name;this.age = age;
- }public String getName() {return name;
- }public void setName(String name) {this.name = name;
- }public Integer getAge() {return age;
- }public void setAge(Integer age) {this.age = age;
- }
-
- @Overridepublic String toString() {return "Person{" +
- "name='" + name + '\'' +
- ", age=" + age +
- '}';
- }
- }
- package com.xuweiwei.spring.condition;import org.springframework.context.annotation.ImportSelector;import org.springframework.core.type.AnnotationMetadata;/**
- * @describe: 自定义逻辑返回需要导入的组件
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class MyImportSelector implements ImportSelector {/** * 返回值就是要导入到容器中的组件全类名
- * @param importingClassMetadata 当前标注@Import注解的类的所有注解信息
- * @return */@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"com.xuweiwei.spring.model.Blue","com.xuweiwei.spring.model.Red"};
- }
- }
- package com.xuweiwei.spring.config;import com.xuweiwei.spring.condition.MyImportSelector;import com.xuweiwei.spring.model.Color;import com.xuweiwei.spring.model.Person;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Import;import org.springframework.context.annotation.Lazy;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 *///配置类==配置文件//告诉Spring这是一个配置类@Import(value = {Color.class, MyImportSelector.class})
- @Configuration //相当于applicationContext.xmlpublic class MainConfig {/** * 懒加载:容器启动的时候不创建对象,而是在第一次使用的时候,才创建对象
- * @return */@Lazy
- @Beanpublic Person person() {
- System.out.println("给容器中注入Bean^_^ ^_^ ^_^ ^_^");return new Person("许威威", 27);
- }
-
- }


- package com.xuweiwei.sping;import com.xuweiwei.spring.config.MainConfig;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class ConfigurationSpringTest {
-
- @Testpublic void test() {
- ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
- String[] names = context.getBeanDefinitionNames();for (String name : names) {
- System.out.println(name);
- }
- }
-
- }


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Blue {
- }


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Color {
- }


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Person {private String name;private Integer age;public Person() {
- }public Person(String name, Integer age) {this.name = name;this.age = age;
- }public String getName() {return name;
- }public void setName(String name) {this.name = name;
- }public Integer getAge() {return age;
- }public void setAge(Integer age) {this.age = age;
- }
-
- @Overridepublic String toString() {return "Person{" +
- "name='" + name + '\'' +
- ", age=" + age +
- '}';
- }
- }


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Red {
- }


- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class White {
- }
- package com.xuweiwei.spring.condition;import com.xuweiwei.spring.model.White;import org.springframework.beans.factory.support.BeanDefinitionRegistry;import org.springframework.beans.factory.support.RootBeanDefinition;import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;import org.springframework.core.type.AnnotationMetadata;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {/** * @param importingClassMetadata:当前标注@Import注解的类的所有注解信息
- * @param registry:BeanDefinition注册类 */@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {boolean flag = registry.containsBeanDefinition("white");if (!flag) {
- registry.registerBeanDefinition("white", new RootBeanDefinition(White.class));
- }
- }
- }
- package com.xuweiwei.spring.config;import com.xuweiwei.spring.condition.MyImportBeanDefinitionRegistrar;import com.xuweiwei.spring.condition.MyImportSelector;import com.xuweiwei.spring.model.Color;import com.xuweiwei.spring.model.Person;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Import;import org.springframework.context.annotation.Lazy;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 *///配置类==配置文件//告诉Spring这是一个配置类@Import(value = {Color.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
- @Configuration //相当于applicationContext.xmlpublic class MainConfig {/** * 懒加载:容器启动的时候不创建对象,而是在第一次使用的时候,才创建对象
- * @return */@Lazy
- @Beanpublic Person person() {
- System.out.println("给容器中注入Bean^_^ ^_^ ^_^ ^_^");return new Person("许威威", 27);
- }
-
- }


- package com.xuweiwei.sping;import com.xuweiwei.spring.config.MainConfig;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class ConfigurationSpringTest {
-
- @Testpublic void test() {
- ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
- String[] names = context.getBeanDefinitionNames();for (String name : names) {
- System.out.println(name);
- }
- }
-
- }
1.7 使用FactoryBean注册Bean
- package com.xuweiwei.spring.model;import org.springframework.beans.factory.FactoryBean;/**
- * @describe: 创建Spring提供的FactoryBean
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class ColorFactoryBean implements FactoryBean<Color> {/** * 返回一个Color对象,这个对象会添加到容器中
- * @return * @throws Exception */@Overridepublic Color getObject() throws Exception {return new Color();
- }
-
- @Overridepublic Class<?> getObjectType() {return Color.class;
- }
-
- @Overridepublic boolean isSingleton() {return true;
- }
- }
- package com.xuweiwei.spring.config;import com.xuweiwei.spring.model.ColorFactoryBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 *///配置类==配置文件//告诉Spring这是一个配置类@Configuration //相当于applicationContext.xmlpublic class MainConfig {
-
- @Beanpublic ColorFactoryBean colorFactoryBean(){return new ColorFactoryBean();
- }
-
-
- }


- package com.xuweiwei.sping;import com.xuweiwei.spring.config.MainConfig;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class ConfigurationSpringTest {
-
- @Testpublic void test() {
- ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
- String[] names = context.getBeanDefinitionNames();for (String name : names) {
- System.out.println(name);
- }
- }
-
- }
2 生命周期
2.1 @Bean指定初始化方法和销毁方法
- package com.xuweiwei.spring.model;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */public class Car {public Car() {
- System.out.println("构造方法被调用了O(∩_∩)O哈哈~");
- }public void init() {
- System.out.println("初始化了^_^");
- }public void destroy() {
- System.out.println("销毁了o(╥﹏╥)o");
- }
- }
- package com.xuweiwei.spring.config;import com.xuweiwei.spring.model.Car;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/**
- * @describe:
- * @author: 不为往事扰,余生只爱笑。
- * @version: 1.0 */@Configurationpublic class MainConfig3 {
-
- @Bean(initMethod = "init",destroyMethod = "destroy")public Car car(){return new Car();
- }
-
- }


- package com.xuweiwei.sping;import com.xuweiwei.spring.config.MainConfig3;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class ConfigurationSpringTest {
-
- @Testpublic void test() {
- ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig3.class);
- String[] names = context.getBeanDefinitionNames();for (String name : names) {
- System.out.println(name);
- }
-
- ((AnnotationConfigApplicationContext) context).close();
- }
-
- }
3 属性赋值
原文链接:http://www.cnblogs.com/xuweiweiwoaini/p/10479717.html