工厂模式+反射+配置文件
官方下载
Maven工程引入spring依赖
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>5.2.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>5.2.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.2.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-expressionartifactId>
<version>5.2.5.RELEASEversion>
dependency>
可以集成日志依赖
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
新建一个接口UserService和一个简单的方法:
package com.springioc.demo1;
public interface UserService {
public void sayHello();
}
新建实现类UserServiceImpl.java:
package com.springioc.demo1.impl;
import com.springioc.demo1.UserService;
public class UserServiceImpl implements UserService {
public void sayHello() {
System.out.println("Hello World");
}
}
新建一个java类测试调用这个方法:
package com.springioc.demo1;
import com.springioc.demo1.impl.UserServiceImpl;
import org.junit.Test;
public class Tester {
@Test
public void demo1() {
UserService userService = new UserServiceImpl();
userService.sayHello();
}
}
在resources目录下先新建一个spring的配置文件Application.xml,并且配置:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userService" class="com.springioc.demo1.impl.UserServiceImpl">bean>
beans>
去测试类里加载配置文件
@Test
public void demo2() {
//创建Spring的工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过工厂获得类:
UserService userService = (UserService) applicationContext.getBean("userService");
userService.sayHello();
}
IOC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理
简单说,就是创建UserService对象控制权被反转到了Spring框架
DI Dependency Injection 依赖注入的概念,就是在Spring创
建这个对象的过程中,将这个对象所依赖的属性注入进去。
继续使用上题案例
修改实现类,在实现类中添加属性以及相应的GET和SET方法:
package com.springioc.demo1.impl;
import com.springioc.demo1.UserService;
public class UserServiceImpl implements UserService {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("Hello World" + ":" + name);
}
}
修改上题中demo1的测试代码。
因为name和他的GET与SET是加在实现类上的,用接口接受的实例化,并没有name值属性和方法。
所以用实现类来接受实例化的UserServiceImpl类
@Test
public void demo1(){
// UserService userService = new UserServiceImpl();
UserServiceImpl userService = new UserServiceImpl();
// 设置属性:
userService.setName("张三");
userService.sayHello();
}
在修改配置文件的指定bean标签:
<bean id="userService" class="com.springioc.demo1.impl.UserServiceImpl">
<property name="name" value="张三"/>
bean>
直接运行上题中测试类中的demo2代码不用做任何修改,就能实现相同功能。
@Test
public void demo2() {
//创建Spring的工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过工厂获得类:
UserService userService = (UserService) applicationContext.getBean("userService");
userService.sayHello();
}