spring学习01
1.微服务*
2.反应式框架
3.云原生开发*
4.web应用
5.无服务器技术
6.事件驱动
7.批处理
project(Java开发各个方面)
- framework
- boot
- data 处理数据
- cloud 云原生
- security 安全管理
- session 共享会话
- integration 集成
- Hateoas 媒体服务
- rest docs 文档
- Batch 批处理
- CredHub
- Statemachine 状态机
-…
IOC
控制反转,如何使用对象管理对象
将对象的创建,属性赋值,对对象申明交给容器管理
分为控制和反转
控制:对象创建,属性赋值,对象声明生命周期
反转:管理对象的权限由容器完成
正转:通过new构造方法创建对象,由开发人员控制
通过容器使用容器中的对象。
技术实现
DI注入
依赖注入
public class A{
}
public class B{
private B=new B();
}
即通过这个类获取另一个类的内容
spring 通过反射机制创建对象
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">
</beans>
根标签是beans
beans后面是约束文件内容
beans里面放置bean声明
什么是bean---由spring容器管理的Java对象,叫做bean
(Java反射)
容器对象ApplicationContext:接口
1.spring默认调用无参构造方法创建对象
2.读取配置文件时,一次创建好所有的Java对象,都放在map中。
D!给属性赋值
1)xml配置文件的标签和属性
1.set注入,spring调用set方法
2.构造注入
<bean id="" class="">
<constroctor arg name=" " value=" "></constroctor arg>
</bean>
引用 rel=" "
2)基于注解
1.Component(相当于bean标签)
xml中加入组件扫描器
2.@Repository :放在dao接口的实现类上,表示创建DAO对象,持久层对象,可以访问数据库
3.@Service: 放在业务层接口的实现类上,表示创建业务层对象,业务层对象有事务的功能。
4.@Controller:放在控制器类的上面,表示创建控制器对象,属于表示层对象,可以接收请求,可以将请求结果显示给用户。
以上四个注解都可以创建对象,但其他三个有角色说明,表示对象是分层的,有额外功能。
赋值
@Value
@Autowird 给引用类型赋值
@Qualifer
@Resource byName自动注入
AOP
面向切面编程:
原来问题:
1.源代码可能改动较多
2.重复代码比较多
3.代码难以维护
作用
aspect orient programming:面向切面编程
给方法增加的非业务功能
一般功能都可以复用。日志功能,事务功能,权限检查,参数检查,统计信息
理解方式:
1.设计项目时,找出切面的功能
2.切面功能执行的时间与位置。
(1)让切面功能复用
(2)让开发人员专注业务逻辑,提高开发效率
(3)实现各个功能解耦合
(4)给存在业务功能增加功能,不用修改原来代码
术语
1.切面 aspect
2.连接点 joinPoint 连接切面的业务方法,在这个方法执行时,会执行这个切面功能
3.切入点 Pointcut 是一个或多个连接点的集合。表示这些方法执行时,能增加切面的功能,表示切面执行的位置
4.目标对象 target
5.通知 advice (增强) 表示切面执行时间是目标方法之前还是之后
在advice时间,在pointcut的位置,执行aspect
…
一个动态思想,在程序运行期间,创建代理,在代理执行时,增加切面功能。
给某些方法增加相同的功能。源代码不更改。
实现方式
框架 :
1.spring 实现部分功能,操作比较繁琐
2.Aspectj:独立框架,专门AOP ,属于Eclipse
具体操作
1.通知
表示切面时间时间,用的advice,可以用 注解表示 或 xml配置文件 方式
五个注解:
1.@Before
2.@AfterReturning
3.@Around
4.@AfterThrowing
5.@After
2.PowerCut位置
表示切面执行位置
使用Aspectj中切入点表达式
语法
execution(访问权限类型?返回值类型 包名类名?方法名(参数) 抛出异常类型?) ;不加?表示必须有
加入依赖
spring-context
spring-aspects
MyBaties(数据操作框架)
1.依赖
spring依赖
mybaties依赖
mysql驱动
junit依赖
2.配置文件
1.声明数据源,使用阿里druid连接池
2.声明SqlSessionFactoryBean类
3.声明MapperScannerConfiguration类,内部创建dao代理对象
4.声明service对象
hibernate (数据操作框架)
暂无
MVC(Web开发)
本质是servlet
由前端控制器统一处理DispatcherServlet
1.配置web.xml
两种方式
1.默认方式
<servlet>-->
<servlet-name>SpringMVC</servlet-name>-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>-->
</servlet>-->
<servlet-mapping>-->
<servlet-name>SpringMVC</servlet-name>-->
<url-pattern>/</url-pattern> -->
</servlet-mapping>-->
2.扩展方式
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置SpringMVC配置文件的位置和名称-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<!-- 提前初始化时间-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
配置视图解析器
<!-- 配置Thymeleaf试图解析器-->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="characterEncoding" value="UTF-8"/>
<!-- 模板-->
<property name="templateEngine" >
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<!-- 试图前缀-->
<property name="prefix" value="/WEB-INF/templates"/>
<!-- 视图后缀-->
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
<property name="characterEncoding" value="UTF-8"/>
</bean>
</property>
</bean>
</property>
<property name="viewNames" value="th*,base/*"/>
<property name="order" value="1" />
</bean>
@RequestMapping注解
WebFlux (异步开发)
暂无