Spring——IOC与DI(二)

1.创建配置文件(通常名称起为applicationContext.xml)

添加依赖:

<?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"
       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.xsd">
    
</beans>

 

接口

public interface Animal {
    public void name();
    public void call();
    public void init();
    public void destroy();
}

Cat实体类实现接口

public class Cat implements Animal{
    public Integer age;
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public void name() {
        System.out.println("我是CAT");
    }

    @Override
    public void call() {
        System.out.println("喵喵喵");
    }

    @Override
    public void init() {
        System.out.println("cat 出生了");
    }

    @Override
    public void destroy() {
        System.out.println("cat GG了");
    }
}

Dog实体类实现接口

public class Dog implements Animal {
    
    @Override
    public void name() {
        System.out.println("我是Dog");
    }

    @Override
    public void call() {
        System.out.println("汪汪汪");
    }
    @Override
    public void init() {
        System.out.println("dog 出生了");
    }

    @Override
    public void destroy() {
        System.out.println("dog GG了");
    }
}

配置文件

<bean class="com.xiaonuo.demo1.Cat" id="Cat" scope="prototype" init-method="init" destroy-method="destroy">
    <property name="age" value="10" />
</bean>

测试方法

public void test1() {
//1.加载配置文件
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.根据id获取对象
Cat cat = (Cat)applicationContext.getBean("Cat");
cat.call();
cat.name();
Integer age = cat.age;
System.out.println(age);
applicationContext.close();
}

Spring的工厂类

BeanFactory:老版本使用方式,当调用getBean的时候才会创建实例对象

ApplicationContext:新版本使用方式 当加载配置文件时候就会创建实例对象(在单例模式下生命周期从刚开始创建对象的时候开始——手动关闭后销毁 prototype模式要等垃圾回收后会销毁)

ApplicationContext实现类:ClassPathXmlApplicationContext(读取项目的) 和 FileSystemXmlApplicationContext(读取本地硬盘)

Bean相关配置

名称与标识

id:使用了约束中的唯一约束。里面不能出现特殊字符的

name:没有使用约束中的唯一约束。里面可以出现特殊字符。

设置对象的生命周期方法

init-method:Bean被初始化的时候执行的方法

destroy-method:Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)

Bean的作用范围的配置

singleton:默认的,Spring会采用单例模式创建这个对象。
prototype:多例模式。
request:应用在web项目中,Spring创建这个类以后,将这个对象存入到request范围中。
session:应用在web项目中,Spring创建这个类以后,将这个对象存入到session范围中
globalsession:应用在web项目中,必须在porlet(基于Java的Web组件,子域名)环境下使用。但是如果没有这种环境,相对于session。

工厂实例化的方式

无参构造-默认

静态工厂实例化

实例工厂实例化

JavaConfig配置

//普通配置类
/*表明这个类是配置类*/
@Configuration
/*没有设置的话就默认扫描和这个类相同的包以及他的子包 查找有@Component注解的类 JavaConfig这边不需要用扫描*/
/*@ComponentScan*/
public class CDPlayerConfig {
    @Bean
    public SgtPeppers sgtPeppers(){
        return new SgtPeppers();
    }
    @Bean
    public MediaPlay mediaPlay(){
        return new MediaPlay();
    }
}

//依赖其他类的配置类

@Configuration
public class HelloConfig {
    /*@Autowired
    @Qualifier("sgtPeppers")*/
    @Resource(name = "sgtPeppers")
    private CompactDisc sgtPeppers;
    @Bean
    public IHello getHello(){
        return new Helloimpl(this.sgtPeppers);
    }
}

//测试类

/*自动装配上下文相当于调用了xml*/
@RunWith(SpringJUnit4ClassRunner.class)
/*加载多个配置类的获取bean*/
@ContextConfiguration(classes = {CDPlayerConfig.class,HelloConfig.class})
public class Test {
   /* @Autowired
    @Qualifier("sgtPeppers")*/
    @Resource(name = "sgtPeppers")
    private CompactDisc compactDisc;
    /*@Autowired
    @Qualifier("mediaPlay")*/
    @Resource(name = "mediaPlay")
    private CompactDisc mediaPlay;
    /*@Autowired
    @Qualifier("getHello")*/
    @Resource(name = "getHello")
    private IHello hello;
    @org.junit.Test
    public void test1(){
        compactDisc.play();//compactDisc和mediaPlay类用的都是CompactDisc接口
        mediaPlay.play();
         hello.print();//hello用的IHello接口
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值