大家好呀,我是WIKW。今天是学习maven的第三天,我们学习了基于maven的Spring框架,下面呢就是今天学习的一些笔记和案例,分享给大家。
一、Spring概述
1、Spring框架是企业使用最多的框架,没有之一。
2、Spring是一站式框架,也就是Spring可以整合其他框架。
a、Spring IoC :对象工厂及依赖注入。
b、Spring AOP:面向切面编程技术,Spring 事务管理的基础。
c、Spring Transaction management :Spring 事务管理。
d、Spring Web MVC :强大而灵活的web框架
二、Spring IoC 入门
2.1 什么是IoC
1、IoC是Inversion of Control 的缩写, 即 “控制反转”。
控制反转:将创建对象的权利,由自己(new)反转给Spring 。(自己理解的意思)
2、IoC 作用:解决对象之间的耦合
2 .2 入门案例:基础案例
2.2.1:maven环境
导入坐标:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- 事务 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>
<!--整合-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- mvc json -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
<!--文件上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!--jsp相关-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--整合日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.10</version>
</dependency>
</dependencies>
2.2.2 需求:使用Ioc方式创建UserService对象,并调用查询所有的方法。
2.2.3步骤:
1、编写功能接口及实现类。使用@Component将实现类添加到Spring容器。
2、编写配置类,并扫描实现类。使用@Configuration声明配置类,使用@ComponentScan扫描。
3、编写测试类。使用ApplicationContext从spring容器中获取实现类。
2.2.3实现:
1、UserService接口:
public interface UserService {
void selectAll();
}
2、UserService实现类:
@Component("userService1") //放入spring容器
public class UserServiceImpl implements UserService {
@Override
public void selectAll() {
System.out.println("demo01 userService");
}
}
3、配置类Demo01configuration:
@Configuration //配置类
@ComponentScan(basePackages = "com.czxy.demo01.service") //扫描需要被加载的类所在的包
public class ConfigDemo01 {
}
4、测试类
public class TextDemo01IoC {
public static void main(String[] args) {
//1、通过处理注解 获得工厂
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ConfigDemo01.class);
//2、通过工厂获得mapper
UserService userSerive = (UserService) applicationContext.getBean("userService1");
//3、调用
userSerive.selectAll();
}
}
2.2.4 总结:
1、配置类必须使用@Configuration进行声明
2、@Component扫描的是service的包名。
2.3 入门案例:依赖注入
2.3.1步骤:
1、编写UserDao,并使用@Component
2、编写UserService,并使用@Component
3、修改UserService,提供UserDao成员变量,并使用@Resource完成注入
4、编写配置类,使用@ComponentScan扫描(service、dao)
5、测试类
2.3.2实现:
1、编写UserDao,并使用@Component
@Component("userDao2")
public class UserDao {
public void selectAll(){
System.out.println("demo02 UserDao selectAll");
}
}
2、编写UserService,并使用@Component
3、修改UserService,提供UserDao成员变量,并使用@Resource完成注入
@Component("userService2")
public class UserService {
@Resource(name = "userDao2") //从spring IoC 容器中获取对象
private UserDao userDao;
public void selectAll(){
userDao.selectAll();
System.out.println("demo02 userService");
}
}
4、编写配置类,使用@ComponentScan扫描(service、dao)
@Configuration
@ComponentScan(basePackages = {"com.czxy.demo02_DI.dao","com.czxy.demo02_DI.service"})
public class Demo02Configuration {
}
5、测试类
public class Text02 {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Demo02Configuration.class);
UserService userService = applicationContext.getBean("userService2",UserService.class);
userService.selectAll();
}
}
3:Ioc详情
3.1 Bean创建
3.1.0 Bean相关注解
注解 | 描述 |
@Component | 将修饰的资源交予spring管理。 value属性:为资源命名(唯一标识) |
@Controller | 衍生注解,与@Component作用和属性相同。特用于修饰表示层的资源。 |
@Service | 衍生注解,与@Component作用和属性相同。特用于修饰业务逻辑层的资源。 |
@Repository | 衍生注解,与@Component作用和属性相同。特用于修饰数据访问层的资源。 |
3.1.1 需求:使用基本结构,编写查询所有学生
3.1.2步骤:
1、编写StudentDao接口及方法
2、编写StudentDao实现类:StudentDaoImpl
3、编写StudentService接口及方法
4、编写StudentService实现类:StudentServiceImpl
5、编写配置类 :Demo03Configuration
6、编写测试类
3.1.3实现:
1、编写StudentDao接口及方法
public interface StudentDao {
void selectAll();
}
2、编写UserDao实现类:StudentDaoImpl
@Repository("studentDao")
public class StudentDaoImpl implements StudentDao {
@Override
public void selectAll() {
System.out.println("demo04 repository");
}
}
3、编写StudentService接口及方法
public interface StudentService {
void selectAll();
}
4、编写StudentService实现类:StudentServiceImpl
@Service("studentService")
public class StudentServiceImpl implements StudentService {
@Resource(name = "studentDao")
private StudentDao studentDao;
@Override
public void selectAll() {
System.out.println("demo04 service");
studentDao.selectAll();
}
}
5、编写配置类 :Demo03Configuration
@Configuration
@ComponentScan(basePackages = {"com.czxy.demo03_Component.dao","com.czxy.demo03_Component.service", "com.czxy.demo03_Component.controller"})
public class Demo03Configuration {
}
6、编写测试类
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = Demo04Configuration.class)
public class TestDemo03 {
@Resource(name = "studentController")
private StudentController studentController;
@Test
public void run(){
studentController.selectAll();
}
}