spring技术
spring顾名思义就是春天的意思,但是一年四季,春夏秋冬,只有春,其他三个不要了吗?就是意味着这个框架的到来就是春天,简化了我们平时的挺多java的繁琐,复杂,重复的操作。
spring的核心内容
- IOC容器; 把创建的对象交给spring管理
- AOP; 不修改源代码,功能增强
- IJDBCTemplete ;
- 事务管理;
- Spring5新特性 ;
详细步骤
1.创建maven项目
2.导入spring5相关的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.th</groupId>
<artifactId>mmvn_test</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- 传递性 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<dependency>
<groupId>net.sourceforge.cglib</groupId>
<artifactId>com.springsource.net.sf.cglib</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.aopalliance</groupId>
<artifactId>com.springsource.org.aopalliance</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>com.springsource.org.aspectj.weaver</artifactId>
<version>1.6.8.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
</dependencies>
</project>
3.创建一个普通类,编写一个普通方法。
4。创建spring配置文件。
<?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">
<bean id="user" class="com.th.test1.User"></bean>
</beans>
注:spring的配置文件都是含beans的。
5.测试类
综上所述,一个最简单的 spring小demo就实现了。
Ioc
概念:
翻译过来就是控制反转的意思,就是不用一直不停的去对象创建和对象的调用了,集中的交给spring去进行管理了。使用IOC可以降低耦合度。
原理:就是xml解析,工厂模式,反射机制。
IOC操作的bean管理
bean管理主要就是指两个操作
1.spring创建对象 2.spring注入属性。
bean的管理操作用两种方式,
1.xml
2,注解
由于结合后期的学习springboot,使用注解的方式较多,xml的方式虽然逻辑清晰,但是需要写大量的代码,建交委繁琐,所以主要讲注解方式。
IOC 操作 Bean 管理(基于注解方式)
1、什么是注解
(1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…)
(2)使用注解,注解作用在类上面,方法上面,属性上面
(3)使用注解目的:简化 xml 配置
2、Spring 针对 Bean 管理中创建对象提供注解
(1)@Component
(2)@Service
(3)@Controller
(4)@Repository
- 上面四个注解功能是一样的,都可以用来创建 bean 实例
component一般处理的是普通层的操作。
service一般处理的是业务层的操作。
controller一般处理的是web层的操作。
repository一般处理的是dao层的操作。
3、基于注解方式实现对象创建
第一步 引入依赖
第二步 开启组件扫描
<context:component-scan base-package=“com.th”></context:component-scan>
第三步 创建类,在类上面添加创建对象注解
//在注解里面 value 属性值可以省略不写,
//默认值是类名称,首字母小写
//UserService – userService
@Component(value = “userService”) //
public class UserService {
public void add() {
System.out.println(“service add…”);
}
}
4、开启组件扫描细节配置
<context:component-scan base-package=“com.atguigu” use-defaultfilters=“false”>
<context:include-filter type=“annotation”
expression=“org.springframework.stereotype.Controller”/>
</context:component-scan>
5、基于注解方式实现属性注入
(1)@Autowired:根据属性类型进行自动装配
第一步 把 service 和 dao 对象创建,在 service 和 dao 类添加创建对象注解
第二步 在 service 注入 dao 对象,在 service 类添加 dao 类型属性,在属性上面使用注解
@Service
public class UserService {
//定义 dao 类型属性
//不需要添加 set 方法
//添加注入属性注解
@Autowired
private UserDao userDao;
public void add() {
System.out.println(“service add…”);
userDao.add();
}
}
6、完全注解开发 (j就是放弃前面的所有xml操作,直接使用下面的这些注解就可以)
(1)创建配置类,替代 xml 配置文件
@Configuration //作为配置类,替代 xml 配置文件
@ComponentScan(basePackages = {“com.th”})
public class SpringConfig {
}
7.编写测试类
@Test
public void testService2() {
//加载配置类
ApplicationContext context
= new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService = context.getBean(“userService”,
UserService.class);
System.out.println(userService);
userService.add();
}
总结
个人学习的简单版的spring的aop操作如上所示,使用几个注解,就可以省去不断的new操作,和属性的注入问题,还使用了工厂类,降低了类和类之间的耦合度。还有反射机制。
后面的aop操作,等下次更新吧,如果有错误的地方还希望大家能够多多指教。