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接口 } }