Java疯狂详解之Spring_装配Bean

HelloSpring

  • IoC:控制反转
  • di:依赖(全局变量) 注入(set方法设置)
    我们自己类的全局变量 spring来替我们 通过set方法注入进去

装配Bean(基于XML)

常见的常见bean方式:
- 默认构造

<bean id="sbId" class=""/>
  • 工厂模式
    • 实例工厂(见struts和hibernate整合项目)
    • 静态工厂
      • 工厂方法是静态的 不需要创建工厂对象
        /**
         *  工厂方法 大多数 返回值会是一个接口
         *  根据不同的需求 产出该接口的不同实现
         **/
          public class StaticFactory {
   

              public static Foo getFoo(){
                  return new Foo();
              }
          }

            /**
              *  该方法 会先创建BeanFactory对象 再创建Foo对象
              *  spring 调用方法 不需要关系权限修饰符
              *  它是使用反射直接调用
             **/
          public class Foo {
   

              public void fun(){
                  System.out.println("fun方法被调用");
              }
          }

          /**
           *  如果我们在加载配置文件的时候不给路径
           *  默认加载 applicationContext.xml(web工程)
           **/
          public void fun(){

                  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
                  Foo foo = (Foo) context.getBean("fooId");
                  foo.fun();

                  Foo foo2 = (Foo) context.getBean("foo2ID");
                  foo2.fun();
                  System.out.println(foo == foo2);

                  /**
                   *  默认构造方法 
                   *  静态工厂
                   *  实例工厂
                   *  注意: get出来的都是同一个对象 不管get多少次
                  **/
                  Foo foo3 = (Foo) context.getBean("foo
                  Foo foo4 = (Foo) context.getBean("foo
                  System.out.println(foo3==foo4);
           }
 ```
        -  实例工厂 与 静态工厂区别
           - 需要先创建工厂对象 所提供的工厂方法全部是非静态的
           - 例如 Struts + Hibernate 的项目工厂

# Spring中Bean的种类
在Spring中Bean分为两类
- 普通Bean: 我们之前写的都是普通Bean
- FactoryBean: 是一个特殊的Bean 它具有工厂生产的能力 只能生成特定的对象Bean 需要实现FactoryBean接口

```xml
<!--
    使用spring 提供的接口 FactoryBean 实例化对象
    class: 实现了 FactoryBean 接口的类
-->
<bean id="fooFactoryBeanId" class="com.wlznb.test.factory.TestFactoryBean"/>




<div class="se-preview-section-delimiter"></div>
public class TestFactoryBean implements FactoryBean<Foo>{
   
    //  泛型: 这个FactoryBean 要创建什么就写什么
    @Override
    public Foo getObject() throws Exception {
        return new Foo();
    }

    @Override
    public Class<?> getObjectType() {
        return Foo.class;
    }

    /**
     *  可以选择是否是单例对象(不是单例对象 意味着
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值