Spring学习记录
Spring的入门程序
创建Web项目 导入jar包
在src下创建接口UserDao 接口interface 不是class
public interface UserDao {
public void say();
}
创建UserDao接口的实现类UserDaolmpl
public class UserDaolmpl implements UserDao {
public void say() {
System.out.println("UserDao say Hello World !");
}
}
创建Srping的配置文件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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
id:属性值,唯一的
class:创建对象的类的全路径
scope:
singleton:默认值,单实例对象,只有一个对象
prototype:多实例
-->
<bean id="userDao" class="com.yan.ioc.UserDaolmpl" scope="prototype" />
</beans>
创建测试类
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIoc {
public static void main(String[] args) {
//初始化spring容器,加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过容器获取Userdao实例 UserDao userDao=(UserDao)接口
UserDao userDao=(UserDao) applicationContext.getBean("userDao");
//获取ID
userDao.say();
}
}
运行得到输出结果
依赖注入的 实现方式
平常的Java开发中,程序员在某个类中需要依赖其它类的方法。
通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理。
Spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。
依赖注入的另一种说法是"控制反转"。通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员。
而控制反转是指new实例工作不由我们程序员来做而是交给Spring容器来做。、
在包中创建接口UserService,在接口中编写一个say()方法
public interface UserService {
public void say();
}
创建接口的实现类UserServicelmpl
public class UserServicelmpl implements UserService {
//声明UserDao
private UserDao userDao;
//添加setter方法,用于实现依赖注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void say() {
//调用UserDao中的say对象,并执行输出语句
this.userDao.say();
System.out.println("userService say Hello World !");
}
}
在配置文件中创建一个位UserServcie的Bean
<bean id="userService" class="com.yan.ioc.UserServicelmpl">
<!-- 将id为userDao的Bean实例注入到userService实例中 -->
<property name="userDao" ref="userDao"/>
</bean>
上述代码中property是bean元素的子元素,它用于调用Bean实例中的setUserDao方法完成属性赋值,从而实现依赖注入。
其name属性表示Bean实例中的相应属性名,ref属性用于指定其属性值。
创建测试类TestDI
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {
public static void main(String[] args) {
//1.初始化Srping容器,加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.通过容器获取UserService实例
UserService userService= (UserService) applicationContext.getBean("userService");
//3.调用实例中的say方法
userService.say();
}
}
运行程序输出结果
输出结果可以看出,使用Spring容器通过UserService实现类中的say()方法,调用类UserDao实现类中的say()方法,
并且输出了结果。这就是Spring容器属性setter注入的方式,也是实际开发中常用的一种方式。
读黑马程序员《Java EE企业级 应用开发教程》