spring之如何创建bean(1、自动装配)
2017-08-19 08:50
429 查看
学习spring的基础之一就是要去理解bean的含义以及使用方式。之前学习的时候感觉bean的使用方式真的。。。好迷啊,但是前不久看书+看视频后,终于搞懂了。特地写一篇文章来记录下
首先说说什么是bean吧。书上说是bean是各种组件,spring通过XML或者Java将这些组件合并在一起,并主动将这些组件注入其他组件中,这样形成了相互依赖和相互合作的现象。以下是我的理解:其实bean就是返回一个实例化对象。比如我们平常写Java,会有“A a=new A();”这样便创立了一个实例化的a对象。但是在bean中不会这么写,它会写成“A a;”即没有实例化,然后通过设置使之达到“A a=new A();”的效果。
设置bean有三种方式:自动装配、基于JavaConfig的装配、基于XML的装配。今天先写下自动装配。通过书上的几个例子,加上我个人的理解来写下吧。
首先,顾名思义可知自动装配是spring自动配置的,无需我们显式配置。它主要通过@Component @ComponentScan @Autowired等注解来实现。如以下代码
1、先写个接口
2、写个类实现这个接口并实现其中的play()方法,可以看到这个类上面用了@Component注解。这个注解表示:将这个POJO(普通Java类)设置为一个组件类。spring会通过自动装配返回一个bean(我的理解是会返回一个 new SgtPeppers();)
3、设置一个类作为“Config类”,使用@Configuration即表示将其声明为一个“Config类”;使用@ComponentScan代表这个“Config类”能扫描组件并将它们整合到这个类中。同时也可以看到这个类中没有任何代码,就是个空类。这便是最简单的Config类
3.5、也许以下的XML比较常见,这个XML代码实现了和上面这个Config类同样的功能
4、上面便完成了最简单的自动配置,我们可以通过JUnit来测试,SgtPeppers这个bean有没有被整合到Config中去。这段代码中使用了@Autowired注解,即会自动注入对象,如此段代码中只写了 “CompactDisc cd”。此时并未实例化,当加上@Autowired时候,序号3中的Config类便会将它扫描到的SgtPeppers bean自动注入cd对象中。从而实现了”CompactDisc cd=new SgtPeppers();”这行代码。最后加个@Test来使用JUnit来进行检测,效果如下图:
5、接下来让我们把“@Autowired”注解拿掉试试,可以看到没有自动注入的话,这个cd就没有实例化,测试失败
首先说说什么是bean吧。书上说是bean是各种组件,spring通过XML或者Java将这些组件合并在一起,并主动将这些组件注入其他组件中,这样形成了相互依赖和相互合作的现象。以下是我的理解:其实bean就是返回一个实例化对象。比如我们平常写Java,会有“A a=new A();”这样便创立了一个实例化的a对象。但是在bean中不会这么写,它会写成“A a;”即没有实例化,然后通过设置使之达到“A a=new A();”的效果。
设置bean有三种方式:自动装配、基于JavaConfig的装配、基于XML的装配。今天先写下自动装配。通过书上的几个例子,加上我个人的理解来写下吧。
首先,顾名思义可知自动装配是spring自动配置的,无需我们显式配置。它主要通过@Component @ComponentScan @Autowired等注解来实现。如以下代码
1、先写个接口
package soundsystem; public interface CompactDisc { void play(); }
2、写个类实现这个接口并实现其中的play()方法,可以看到这个类上面用了@Component注解。这个注解表示:将这个POJO(普通Java类)设置为一个组件类。spring会通过自动装配返回一个bean(我的理解是会返回一个 new SgtPeppers();)
package soundsystem; import org.springframework.stereotype.Component; @Component public class SgtPeppers implements CompactDisc{ public void play(){ System.out.println("this is play_method"); } }
3、设置一个类作为“Config类”,使用@Configuration即表示将其声明为一个“Config类”;使用@ComponentScan代表这个“Config类”能扫描组件并将它们整合到这个类中。同时也可以看到这个类中没有任何代码,就是个空类。这便是最简单的Config类
package soundsystem; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan public class CDPlayerConfig { }
3.5、也许以下的XML比较常见,这个XML代码实现了和上面这个Config类同样的功能
<?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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <context:component-scan base-package="soundsystem" /> </beans>
4、上面便完成了最简单的自动配置,我们可以通过JUnit来测试,SgtPeppers这个bean有没有被整合到Config中去。这段代码中使用了@Autowired注解,即会自动注入对象,如此段代码中只写了 “CompactDisc cd”。此时并未实例化,当加上@Autowired时候,序号3中的Config类便会将它扫描到的SgtPeppers bean自动注入cd对象中。从而实现了”CompactDisc cd=new SgtPeppers();”这行代码。最后加个@Test来使用JUnit来进行检测,效果如下图:
package soundsystem; import static org.junit.Assert.assertNotNull; 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(classes=CDPlayerConfig.class) public class CDPlayerTest { @Autowired private CompactDisc cd; @Test public void test(){ assertNotNull(cd); } } 可以看到,右侧下方的一条绿色的线,代表成功,即这个未实例化的cd对象已经被注入(即已经实例化了)
5、接下来让我们把“@Autowired”注解拿掉试试,可以看到没有自动注入的话,这个cd就没有实例化,测试失败
相关文章推荐
- 第36天(就业班) spring引入、专业术语、spring六大模块、bean创建对象的细节、IOC容器、对象依赖关系、自动装配、注解方式
- 框架 day36 Spring3 入门,DI依赖注入,装配bean基于xml/注解, 整合Junit4,配置约束自动提示
- [Spring]Bean的自动装配Autowire【学习笔记】
- Spring常用注解,自动扫描装配Bean
- Atitit ioc 之道 attilax著 第2章 装配Bean 33 2.1 Spring配置的可选方案 34 2.2 自动化装配bean 35 2.2.1 创建可被发现的bean 35 2.
- Spring常用注解,自动扫描装配Bean
- 【Spring学习15】自动装配Bean
- Spring中如何装配Bean(一)
- Spring自动装配Bean的两种方法(二)
- Spring4深入理解IOC&DI02----Bean配置--自动装配、bean之间的继承与依赖、使用外部属性文件
- Spring学习第五天:配置bean-自动装配
- Spring全家桶(二)Bean之间的关系、自动装配、作用域和使用外部文件
- Spring中bean的三种装配机制之——自动装配
- Spring <bean>标签属性 Autowire自动装配
- spring学习教程7-spring容器创建bean对象的方式以及如何处理多个spring配置文件
- Spring 如何通过 Java 代码装配 bean?
- Spring学习(二十一)Spring自动装配Bean的属性
- spring自动装配bean
- Spring常用注解,自动扫描装配Bean
- spring自动装配(No qualifying bean )