参考内容:http://jinnianshilongnian.iteye.com/blog/1413857
关于Ioc容器的理解:我的理解就是这个xml文件,Ioc就是控制反转的意思。
关于spring中的bean
这个bean其实就是我们创建的实例
Bean创建方式定义:说明是通过构造器还是工厂方法创建Bean;
Bean之间关系定义:即对其他bean的引用,也就是依赖关系定义,这些引用bean也可以称之为同事bean 或依赖bean,也就是依赖注入。
在一个bean文件中我们可以自己定义一个bean,也可以引用其他xml文件来引入bean
关于bean的命名,建议就使用id进行命名,也可以多加个name来使用别名,其他命名方式就不建议使用了<beans>
<import resource=”resource1.xml”/>
<bean id=”bean1”class=””></bean>
<bean id=”bean2”class=””></bean>
<bean name=”bean2”class=””></bean>
<alias alias="bean3" name="bean2"/>
<import resource=”resource2.xml”/>
</beans>
实例化bean的方法
1使用构造器就行实例化:其实就是使用构造方法实例化,可以带参数也可以不带参数
<bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/>
<bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2">
<!-- 指定构造器参数 -->
<constructor-arg index="0" value="Hello Spring!"/>
</bean>
实例如下
1.package cn.javass.spring.chapter2;
2. public class HelloImpl2 implements HelloApi {
3. private String message;
4. public HelloImpl2() {
5. this.message = "Hello World!";
6. }
7. Public HelloImpl2(String message) {
8. this.message = message;
9. }
10. @Override
11. public void sayHello() {
12. System.out.println(message);
13. }
14.}
1.<!--使用默认构造参数-->
2.<bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/>
3. <!--使用有参数构造参数-->
4.
5.<bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2">
6.<!-- 指定构造器参数 -->
7. <constructor-arg index="0" value="Hello Spring!"/>
8.</bean>
1.@Test
2.public void testInstantiatingBeanByConstructor() {
3. //使用构造器
4. BeanFactory beanFactory =
5.new ClassPathXmlApplicationContext("chapter2/instantiatingBean.xml");
6. HelloApi bean1 = beanFactory.getBean("bean1", HelloApi.class);
7. bean1.sayHello();
8. HelloApi bean2 = beanFactory.getBean("bean2", HelloApi.class);
9. bean2.sayHello();
10.}
说白了就是定义配置文件的时候要与相对应的类的构造方法保持一致
2使用静态工厂方式实例化Bean:其实就是指定一个类,使用factory-method属性制定类中的一个静态方法来创建bean,也可以使用带参数,添加参数使用<constructor-arg index="0" value="Hello Spring!"/>
实际例子如下
1.public class HelloApiStaticFactory {
2. //工厂方法
3. public static HelloApi newInstance(String message) {
4. //返回需要的Bean实例
5. return new HelloImpl2(message);
6.}
7.}
1.<!-- 使用静态工厂方法 -->
2.<bean id="bean3" class="cn.javass.spring.chapter2.HelloApiStaticFactory" factory-method="newInstance">
3. <constructor-arg index="0" value="Hello Spring!"/>
4.</bean>
1.@Test
2.public void testInstantiatingBeanByStaticFactory() {
3. //使用静态工厂方法
4. BeanFactory beanFactory =
5.new ClassPathXmlApplicationContext("chaper2/instantiatingBean.xml");
6. HelloApi bean3 = beanFactory.getBean("bean3", HelloApi.class);
7. bean3.sayHello();
8.}
3使用实例工厂方法实例化Bean:其实就是先用构造器方法实例化一个bean然后再使用factory-bean引用创建好的bean,再通过factory-method指定一个方法去实例化bean,该方法会返回一个bean对象
实例如下
2.package cn.javass.spring.chapter2;
3.public class HelloApiInstanceFactory {
4.public HelloApi newInstance(String message) {
5. return new HelloImpl2(message);
6. }
7.}
8.
1.<!—1、定义实例工厂Bean -->
2.<bean id="beanInstanceFactory"
3.class="cn.javass.spring.chapter2.HelloApiInstanceFactory"/>
4.<!—2、使用实例工厂Bean创建Bean -->
5.<bean id="bean4"
6.factory-bean="beanInstanceFactory"
7. factory-method="newInstance">
8. <constructor-arg index="0" value="Hello Spring!"></constructor-arg>
9.</bean>
1.@Test
2.public void testInstantiatingBeanByInstanceFactory() {
3.//使用实例工厂方法
4. BeanFactory beanFactory =
5.new ClassPathXmlApplicationContext("chapter2/instantiatingBean.xml");
6. HelloApi bean4 = beanFactory.getBean("bean4", HelloApi.class);
7. bean4.sayHello();
8.}
现在我们已经可以简单的使用spring最基本的东西,也就是使用Ioc容器进行实例化bean,也就是帮助我们创建实例对象,并且可以通过 beanFactory.getBean()得到bean对象进行使用。目前我们会定义一些简单的bean对象,下一节开始我们会介绍bean与bean之间的关系,也就是依赖注入