属于一个新的IOC容器
看你一下你单元测试继承的类有没有after方法
在配置注释中如果将bean暴露给容器,那么在运行测试时会自动运行初始方法,所以A类的init方法被调用
@Bean 需要在配置类中使用,即类上需要加上@Configuration注解;
@Compent 作用就相当于 XML配置 ,直接使用
store 没有获取(Store store = super.getBean(“store”) 这里的store的类型应该是Store也就是接口类型 而不是实现类StoreImpl
额 这里跳快了 这是个接口。。
《spring实战》2.3中开头介绍到:
你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component和
@Autowired注解的,因此就不能使用自动化装配的方案了。
spring要求这个init-method方法是一个无参数的方法。
Spring要求init-method是一个无参数的方法,如果init-method指定的方法中有参数,那么Spring将会抛出java.lang.NoSuchMethodException
不能传参数,那你的参数就在init method里面修改
对象设置默认是单例模式,所以作用域不用管,想触发销毁方法,通过容器使用对象后,使用容器对象调用closed方法关闭容器来触发销毁
<?xml version="1.0" encoding="UTF-8"?>
<beans></beans>相当于这个
项目启动时加载的,因为项目启动时会加载spring的bean容器进行bean的实例化。
一楼说得太粗了。这样说,我也可以说golang和Java本质没什么区别,只是语言理念不同。
二楼从应用的角度,解释了一楼提出的分类问题。
当然,我也懒得详细说明,简单粘贴以前写的一份随笔记录:
“
但从官方文档来看,两者还意味着bean加载方式的不同。
(@Bean也需要标注在@Configuration标注的类中,@Configuration继承@Component)
虽然Component注解也会当做配置类,但是并不会为其生成CGLIB代理Class。而@Configuration标注的配置类,会通过CGLIB代理Class(详见ConfigurationClassPostProcessor#enhanceConfigurationClasses),所以每次都是获取IOC容器中的固定的bean。
@Bean就得看所在类是@Component标注,还是@Configuration标注了。
在配置类的方法间调用时,如果类时@component标注的,每次调用获取的都是新的实体;而如果是@configuration标注的话,每次调用返回的是同一个实体Bean。其他方面都是相同,可以无差别使用(装配注入等)。
这是因为@Configuration标注下的@Bean调用函数使用都是代理对象,获取的都是从IOC容器里获取的bean,因此都是同一个。而@Component标注下的@Bean下只是普通的函数方法调用,因此每次调用后,都不是同一个。
(另外,bean最早注册进入IOC容器,也还是反射方式。并且@Scope是注入处的范围,不在此)
”
另外建议题主,可以看看官方文档。这个问题在官方文档中,有明确说明的。
@Bean 少了initMethod("")和destroyMethod("");
我不懂,但是我想问一下,不能被抛到zhujie2.Store中,代码中的zhujie2在哪里
用Bean可以设置InitMethod与DestoryMethod属性。
执行了好吗
xml配置文件中<beans ... >里面看看有没有什么错的信息
是这样的spring-beanannotation.xml是为了初始化一个spring容器,有些写东西必写在这个里面,比如schemaLocation什么的一些东西,有了这些东西才能初始化容器。@Configuration和@Bean这两个标签只是为了简化xml配置,spring会自动扫描这些标签,并注册(其实也是写在xml里,只是不用你写罢了);以上个人见解,仅供参考,如有谬误,请指正!
之前注解都是在类上面注解比如@Service,@Respository,@Compinent。直接getBean("bean name")就可以获取。
这个的@Bean注解的是方法,而且方法是要必须有返回值的。通过getBean(“方法名”)后获取的是返回的类实例
最好看看Java Web的课程,给你一个学习计划的链接,按照这个学习计划的顺序学习一下http://www.imooc.com/course/programdetail/pid/31