一、入门案例
装好了所有环境,跟着尚硅谷动手写了第一个测试类
引入类/包 alt+enter
运行一个方法,直接选中方法,然后run就行
public class TestSpring5 {
@Test
public void testAdd(){
//1.加载Spring配置文件
ApplicationContext context= new ClassPathXmlApplicationContext("bean1.xml");
//2.获取配置创建的对象
User user = context.getBean("user", User.class);
//3.做输出
System.out.println(user);//输出user地址
user.add();//调用方法
}
总结:
1.创建普通java工程,引入4个基本依赖加一个日志jar包
2.创建普通类(User),在里面创建普通方法
3.创建spring配置文件(bean1.xml),在里面用bean标签完成配置
4.写测试代码
二、反转控制
2.1传统的java调用对象方式
想在service里面调用add方法
class UserService(){
void execute(){
UserDao dao=new UserDao();
dao.add();
}
//要在execute方法里面实例化UserDao的对象,再用对象调用方法。
}
class UserDao{
void add() {
}
}
特点:耦合度太高
2.2工厂模式解耦和
class UserService{
void execute(){
UserDao dao=UserFactory.getDao();
dao.add();
}
}
class UserDao{
void add() {
}
}
class UserFactory{
public static UserDao getDao(){
return new UserDao();
}
特点:工厂(UserFactory)里面创建对象,service里面直接调用;降低了UserService跟UserDao的耦合度.
2.3 IOC降低耦合
(1).xml解析,工厂模式,反射(通过类的字节码文件,来操纵类中内容,得到.class文件)
(2)第一步 xml配置文件,创建配置的对象
<bean id="user" class="com.company.User"></bean>
第二步:有service类和dao类,创建工厂类
class UserFactory{
public static UserDao getDao(){
String classvalue=class属性值;//xml解析
Class clazz=Class.forName(classvalue);//通过反射创建对象,class.forname("路径")
return (UserDao) clazz.newInstance();
}
}
特点:进一步降低耦合。通过工厂模式获取全类名,反射创建对象返回。这么做就是为了能把修改尽量放在配置文件中。
2.4 ioc接口
两个接口
2.4.1BeanFactory
IOC容器基本实现,是spring内部的使用接口,不提供开发人员进行使用
加载配置文件时,不会创建对象,在获取对象时才去创建对象。
//1.加载Spring配置文件
BeanFactory context= new ClassPathXmlApplicationContext("bean1.xml");
//2.获取配置创建的对象
User user = context.getBean("user", User.class);
第一步时不创建对象。
2.4.2ApplicationContext
BeanFactory接口的子接口,提供更多更强大的功能,
//1.加载Spring配置文件
ApplicationContext context= new ClassPathXmlApplicationContext("bean1.xml");
//2.获取配置创建的对象
User user = context.getBean("user", User.class);
加载时配置文件时就会创建对象。
2.4.4ApplicationContext接口里的实现类
鼠标选中接口名。再按CTRL+h就能调出来上图
classpath 类的相对路径,
2.5 IOC操作Bean管理
2.5.1 什么时Bean管理
(1).Spring创建对象
(2).Spring注入属性
2.5.2 Bean管理有两种方式
(1).基于xml配置文件方式实现
(2).基于注解方式实现
2.5.3 操作
set方式注入和有参注入
(1)在Spring配置文件配置对象创建,配置属性注入
在类中定义属性和set方法,在xml文件中完成对象创建和配置属性注入