1.什么是Spring
Spring是一款目前主流的 Java EE 轻量级开源框架,它是以IOC(控制反转)和AOP(面向切面编程)为内核。
2.Spring框架的优点
1.方便解耦,简化开发
2.支持AOP
3.方便程序的测试
4.方便集成各种优秀框架
3.Spring的体系结构
4.入门的第一个程序(基于Maven,IDEA版)
1.创建Module->Maven->选择“Create from archetype”->找到如图选项并创建好项目
2.在pom.xml的poject标签中配置以下代码导入包(配置完成不要忘记点击刷新)
org.springframework spring-context5.3.16
3.创建com.dao包并创建UserDao.java(最好自己手敲一遍)
public interface UserDao {
public void save();
}
4.在dao包中创建impl包并在impl包中创建UserDaoImpl.java
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("save running...");
}
}
5.在resources文件夹中创建applicationContext.xml,在beans标签中添加
6.在impl包下创建Test.java
public class Test implements UserService {
public static void main(String[] args) {
//1.初始化spring容器,加载配置文件
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.通过容器获取userDao实例
UserDao userDao = (UserDao) app.getBean("userDao");
//3.调用实例中的save()方法
userDao.save();
}
}
写完之后在Test.java中点击运行并看到save running...即为成功
5.Spring框架中配置文件的常用配置
在Spring中,XML配置文件(之前的applicationContext.xml)的
1.id:是一个Bean的唯一标识符
2.class:该属性指定了Bean的具体实现类
3.scope:设定Bean实例的作用域。其中比较重要的两个属性值:
singleton(单例):无论如何实现类只有一个实例,对象在加载配置文件时创建,当应用卸载,销毁容器时,对象就被销毁了。
prototype(原型):Spring容器会为每个对该Bean的请求都创建一个新的实例,在每次getBean时创建对象,对象长时间不用时就会被Java垃圾回收器回收。
4.property:
list:用于封装List或数组类型的依赖注入,用法如下
123 13 12
map:用于封装Map类型属性的依赖注入
其中entry代表每一个键值对,entry元素中有key、value、key-ref、value-ref四种属性,不加-ref的为普通值,而加了-ref的为引用类型
props:用于封装Properties类型属性的依赖注入
6.依赖注入popo ppopo
依赖注入(DI)是控制反转(Ioc)的一种方式。
以往我们在一个类中需要调用另外一个类的方法,我们会通过new被调用类来创建对象,进而调用方法,这样做会使调用类与被调用类的耦合性增加。
在Spring框架中,不需要我们再去创建对象,而是由Spring容器来创建。这就是控制反转。
换句话来说,平常我们需要哪个类就调用调用哪个类,现在在Sping中,由Spring帮我们创建对象,我们只需要写配置文件,在方法类中加载配置文件,获取对应实例再调用实例中的方法即可。
依赖注入的实现方式有两种:
1.属性注入
2.构造方法注入
3.接口注入(还未学)
第一种方式实现如下:
一、在com包下创建service包并创建UserServicce类
public interface UserService {
public void save();
}
二、在service包内创建impl包并在impl包下创建UserServicce类的实现类UserServiceImpl
public class UserServiceImpl implements UserService {
//声明UserDao属性
private UserDao userDao;
//添加UserDao属性的setteer方法,用于实现依赖注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
//实现接口中方法
public void save() {
//调用userDao中的save()方法
this.userDao.save();
}
}
三、在applicationContext.xml中的
四、创建测试类Test
public class Test {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) app.getBean("userService");
userService.save();
}
}
运行测试类,你会发现在调用UserServiceImpl的方法的同时也调用了UserDaoImpl的方法,而代码上的改变只是在接口实现类声明UserDao属性并添加了属性的setter方法,并在配置文件的
第二种方式实现(在第一种方式的基础上)如下:
一、在原有的applicationContext.xml文件中将第一种方式的配置注释,添加
二、在UserServiceImpl中把setUserDao方法注释,换为
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
额外补充
1.在applicationContext.xml中可以将Bean的依赖注入写为以下形式:
但是,要用p命名空间,需要在applicationContext.xml的beans元素中写入
xmlns:p="http://www.springframework.org/schema/p"
如图:
2.在Test类中的通过容器创建实例中有两种创建方法如下: //两种方式创建UserService
//第一种(根据id找到bean)
UserService userService = (UserService) app.getBean("userService");
//第二种(仅在applicationContext.xml中相同Class只有一个bean的情况,否则报错)
UserService userService = app.getBean(UserService.class);
7.Bean的实例化
实例化Bean有三种方式:构造器实例化、静态工厂实例化和实例工厂方式实例化
前边依赖注入 便是构造器实例化。
第二种静态工厂实例化的实现:
1.编写工厂类并在其中创建静态的放回值为Bean的方法
2.在配置文件中编写
3.在测试类中
//1.初始化spring容器,加载配置文件
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
// System.out.println(app.getBean("bean"));
第三种实例工厂方式实例化的实现:
1.编写工厂类并在其中创建放回值为Bean的方法
2.在配置文件中编写
3.在测试类中
//1.初始化spring容器,加载配置文件
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
// System.out.println(app.getBean("bean"));
这是我在
黑马程序员最全SSM框架教程|Spring+SpringMVC+MyBatis全套教程(spring+springmvc+mybatis)_哔哩哔哩_bilibili
学习的第一天的成果。



