15. Spring note

day1
什么是Spring?
开源、轻量级

Spring 特征:
1.B/S 和 C/S,使用资源小
2.对象间的关系松,高内聚,低耦合
IOC --- Inverse of control
使得业务组件都处在框架的管理之下
框架可以管理组件的创建和依赖关系
框架可以提供可以配置的服务
3.通过AOP技术将业务与非业务分离
AOP --- Aspect Oreinted Programming
在不修改组件的前提下,为组件提供扩展的服务
4.Spring容器管理整个JavaBean生命周期
简化对j2ee技术的使用
5.与Hibernate、Struts一样是个框架
(类集合) (框架提供)
6.Spring是一个全方位的框架
SpringMVC 类似 Struts

Spring框架在多层开发中位于那一层?或哪几层?
框架简化开发过程,提供公共服务和便利的工具
1.业务逻辑层 (Ioc *AoP) 最擅长的一层
2.表现层 (SpringMVC Web B/S都有)
3.数据持久层 (SpringDAO ORM)

什么是IoC:
1.IOC --- Inverse of control (控制反转)
A主动创建B的实例:正向控制
过去:拉模型
组件决定自己依赖的对象的创建
接口没有在松散耦合中起到太大作用
IOC:推模型,也叫做依赖注入
采用工厂模式管理应用组件的创建,管理组件的依赖关系
用接口表达组件间的依赖
依赖注入的方式
1)构造方法注入
2)set 方法注入
2.Spring IoC 容器先创建B的实例,再把B的实例注入A中
3.执行过程:
1)执行 BeanFactory 或 ApplicationContext 时,解析 xml 文件
2)通过反射,执行 JavaBean 的空参构造方法,创建实例
3)调用 JavaBean 的 set方法,将xml的信息注入到这 JavaBean 实例
或者执行满参构造方法创建实例,同时注入 xml 的信息

spring 框架的7个组成部分
1.BeanFactory -- (低级容器,接口)使用工厂模式实例化组件,装配组件
XmlBeanFactory(实现类)
2.ApplicationContext (高级容器,接口)--- bean factory 增加事件发布,增加了国际化,资源访问等的支持
ClassPathXmlApplicationContext(实现类)
3.aop -- 提供一种基于声明方式的AOP
4.dao 支持--简化jdbc,声明的事务
5.orm 支持-- 简化使用 Hibernate ,toplink 等持久化框架,方便的事务管理
6.web 支持-- 在 web 应用中使用 spring 框架的相关支持,协调表现层和业务层的关系
7.web mvc--- 独立的 web mvc 框架

spring 是全方位的框架
spring 的组成部分相对独立,可选择的使用

作业:
用户注册页面
要求: Servlet + Spring + JDBC + MySQL
1.判断用户名是否已注册(保证用户名唯一性)
2.采用B/S架构,使用IoC功能,完成JavaBean的注入。
在JavaBean不要使用 new 方式创建对象。
3.连接数据库时的 driver ,配置在 xml 文件中。


day2
二、控制反转(inverse of control IOC )
2、Bean 工厂(BeanFactory)的功能和配置
ClassPathResource
在类路径下查找资源
另有 FileSystemResource
XmlBeanFactory
读取 xml 文件中的配置信息
生产bean
解决bean 依赖

* Bean 的创建
spring 可调用bean的构造方法,或通过工厂方法生产 bean 对象

1.利用 bean 的构造方法创建bean
无参的构造方法
<bean id="refName" class="foopak.FooClass">
<property name="username" value="root"/>
<property name="password" value="123"/>
</bean>
有参的构造方法,需指明构造方法的参数列表,通过:
<bean id="refName" class="foopak.FooClass">
<construct-arg><value>arg0</value></construct-arg>
<construct-arg><value>arg1</value></construct-arg>
</bean>
表明调用了两个参数的构造方法

2.通过工厂方法获得 bean 对象
bean 没有公共的构造方法,需通过工厂类或工厂实例来创建
分为静态工厂和实例工厂方法两种情况
静态工厂方法:
class 指明工厂类,factory-method 指明工厂方法
如: Connection con=DriverManager.getConnection(url,user,pwd);
对应的配置:
<bean id="con" class="java.sql.DriverManager" factory-method="getConnection">
<construct-arg><value>jdbc:mysql://localhost/test</value></construct-arg>
<construct-arg><value>zhangsan</value></construct-arg>
<construct-arg><value>pwd</value></construct-arg>
</bean>
工厂方法参数和构造方法参数设置的形式相同

实例工厂方法:
要先创建工厂实例,然后再由工厂实例创建产品
如: Statement stmt = con.createStatement();
con 对象是工厂
stmt 对象是产品
配置为:
<bean id="con" class="java.sql.DriverManager" factory-method="getConnection">
……
</bean>
<bean id="stmt" factory-bean="con" factory-method="createStatement"/>

单例 bean
bean 工厂生产bean 缺省都是单例的
scope 属性
scope="singleton|prototype|request|session"
后两者用于web应用中


通过注入解决bean的依赖

1 依赖注入的两种方式
1) set 注入
<property name="xxxYy">
……
</property>
相当于 setXxxYy(val);
2) 构造方法注入
<construtor-arg>……</construtor-arg>
spring 直接利用了 bean 的 set 或 构造方法
避免了使用接口注入的侵入性

2 依赖的目标类型分成三种形式:
1) 基本类型+String
<value>data</value>
类型自动转化
2) 对其他bean 的引用
<ref bean="target"/>
3) 集合类型
list
props
set
map

3 让spring 自动装配bean,解决依赖
autowire 属性指明自动装配的依据:
byName--- id=property
byType--- 属性的类型=当前工厂中bean的类型
constructor--构造方法参数的类型=当前工厂中bean的类型
autodetect-- constructor ---> byType
autowire-candidate 属性
指明是否作为 autowire 的候选对象
解决多个候选对象的冲突
true ---
false ---
4 让容器检测 bean 所有的依赖是否都已经满足
某个 bean 需要设置好所有属性
防止遗漏装配,在运行后出现莫名奇妙的情况
dependency-check 属性指明应检查的目标类型
simple -- 基本类型+字符串+集合
objects --- 对其他bean的依赖
all
none -- 默认值

管理 Bean 生命周期
生命周期
构造
set
回调初始化方法
getBean 返回
回调方法:
两个属性指明
init-method
destroy-method
或实现两个接口:
InitiallizingBean
DisposableBean

重用 bean 定义
parent -- 继承 bean 定义
bean 之间不一定有继承关系
abstract --- 只作为模板,不可以被实例化

补充:
name
id=""
name="/myBean"
name="a b c"

延迟加载bean
bean 的加载时机
预先加载
构造 bean 工厂时实例化所有bean
延迟加载
getBean 时构造
先构造依赖的bean

BeanFactory 总是延迟加载的
ApplicationContext
BeanFactory 的扩展
预先加载 单例 bean
lazy-init (true|false)

3、ApplicationContext
BeanFactory 的扩展,为应用提供国际化和事件框架的支持

1)I18N(国际化)
ApplicationContext 可以读取国际化的消息文件
getMessage();

实施:
1)注册消息源
<bean id="messageSource"
class="ResourceBundelMessageSource">
<property name="basename">
<value>MessageResource</value>
</property>
</bean>
bean 的id 必须是"messageSource"
2)读取消息
ApplicationContext 的方法:
getMessage(String key,String[] args,Locale l);
key - 消息的key
args- 插入到消息中的参数
l - 区域
Locale 语言和区域代码的封装对象
locale=new Local("zh","CN");
local=Locale.getDefault();
思考:工厂管理的组件怎样使用获得国际化消息

注意:因为AppicationContext包含了BeanFactory所有的功能,所以优先选择 ApplicationContext

2)事件框架
提供了一个观察者模式的框架,快速实现组件间的事件通知

实施:
1 所有想得到通知的对象都实现ApplicationListener
2 事件源发出事件:applicationContext.publishEvent(event);
自定义事件类
什么时候需要?
被观察者在需要传输数据给观察者时
怎么做?
自定义事件类 extends ApplicationEvent


day3
三、面向切面编程(Aspect oriented Programming)
1、代理模式
定义
1 A , B 实现了相同的接口,接口要求方法 m
2 用户调用A的m,A又调用B的m

解决什么问题(什么时候考虑使用代理模式)
1 扩展功能,而不修改现有的类
2 职责具有清晰的划分

怎么用
Actale--接口 方法 act
Actor---实现
Test --- 客户
Broker--实现,Actor 的代理

采用代理实现日志
IFoo
doA,doB,doC
Foo

Test -- Test
FooLogProxy


注意思考:日志代理的弊端
相同的代码散落在每一个方法中


2、使用动态代理解决
下面方法可以直接为接口 Foo 产生代理实例:
Foo proxy = (Foo) Proxy.newProxyInstance(
Foo.class.getClassLoader(),
new Class[]
{ Foo.class },
handler);
对 proxy 调用接口定义的方法,都会被分发给:
handler.invoke()
handler 是实现InvocationHandler 接口的实例
这样就把对多个方法的调用集中起来了
handler.invoke()然后再分发请求到目标方法

实施:
1) 实现 InvocationHandler 接口
2)产生代理

3、Spring 的AOP 采用动态代理实现
一些别扭的概念:
切面:当前关注的一个代码的流程,其中可能调用了多个类的多个方法。
连接点:一个代码流程中的某个步骤,也就是这个代码流程中对某个方法的调用。
通知(Advice):对于某个方法(连接点),进行拦截的拦截规则。
切入点:对于某个方法(连接点),是否被拦截的判断(过滤)规则。
目标对象:某个连接点所在的对象。
AOP代理:目标对象的代理。

代理的生成:ProxyFactoryBean(org.springframework.aop.framework.ProxyFactoryBean)
工厂类,生产代理
区别于 BeanFactory
InvocationHandler 的行为 : Advice

实施:
1) 创建拦截器类,封装代理行为
implements MethodInterceptor
2) 使用 ProxyFactoryBean 产生代理
属性:
target 目标对象e
proxyInterfaces 代理的接口
interceptorNames 代理要干什么

补充:Advice / Interceptor
除了 MethodInterceptor,还有多种接口可供选择
决定拦截方法的时机
方法前拦截 MethodBeforeAdvice
方法后拦截 AfterReturningAdvice
方法抛出异常后拦截 ThrowsAdvice
围绕方法拦截 MethodInterceptor

MethodInterceptor 通用

Pointcut
切点,相当于过滤器,缩小拦截的方法的范围


概要:
缩小接口或类的范围
缩小方法的范围

实施
1) implements Pointcut
定制过滤规则
ClassFilter
站在接口或类的级别上缩小范围
MethodMatcher
站在方法的级别上所有范围
isRuntime()
return true ,意味着要对参数的值做判断,会调用有三个参数的matchs方法
2) 把 pointcut 和 advice 组合成一个 advisor 对象
advisor = pointcut + advice
使用 DefaultPointcutAdvisor(org.springframework.aop.support.DefaultPointcutAdvisor) 构造 advisor 对象
3) 然后把 advisor 添加到 interceptorNames 中


使用 Spring 提供的Advisor实现
1)NameMetchMethodPointcutAdvisor()
1)RegexpMethodPointcutAdvisor()

思考:使用 ProxyFactoryBean 创建代理的缺点??
1)每个target都要声明ProxyFactoryBean真麻烦!!!
2)能不能以自动匹配的形式创建代理
可以!!!使用自动代理创建器

BeanNameAutoProxyCreator(org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator)
为指定的 bean 自动创建代理
属性:
beanNames
interceptorNames
DefaultAdvisorAutoProxyCreator(org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator)
根据 Advisor 创建代理


day4
四、使用AOP管理事务

帐户管理
Account
IAccountDao
long open(String name,double init);
withdraw(long id,double amount);
deposit(long id,double amount);
List<Account> findByName(String name)
JdbcAccountDao
applicationContex.xml
提供数据源,注入给DAO

实践经验:
Dao 中定义的方法是持久化单元操作,
一个事务可能有若干个单元操作构成,
所以事务逻辑不应该出现在Dao中。
通常事务逻辑应用在业务层(service层)

采用 AOP 管理事务
JdbcTransactionManager implements MethodInterceptor

问题:
1)事务管理器与Dao 都操作同一个连接对象
2)同时,要保证在每个线程都操作不同的连接对象
解决方法:采用ThreadLocal 管理连接对象

创建模板类
管理资源(连接对象)的获取释放
执行SQL
JDBCTemplate
update(String sql,Object[] args);
List<Map> query(String sql);

结论:事务管理棘手
资源的管理棘手


五、对Jdbc的支持
1.提供了JdbcTemplate 简化编程
2.提供了声明的事务管理(与编程的事务管理)
不再把事务逻辑硬编码在程序中,而是在配置文件中定义事务边界
3.把所有checkedException ---> uncheckedException
SQLException--->DataAccessException


应用步骤:
Account

IAccountDao
long open(String name,double amount);
void deposit(long id,double amount);
void withdraw(long id,double amount);
List<Account> findByName(String name);

JdbcAccountDao extends JdbcDaoSupport
继承了两个方法:
setDataSource(DataSource ds)
getJdbcTemplate()

Test

applicationContext.xml
datasource(org.springframework.jdbc.datasource.DriverManagerDataSource)
driverClassName
url
username
password
dao
transactionManager(org.springframework.jdbc.datasource.DataSourceTransactionManager)
dataSource
transactionProxy(org.springframework.transaction.interceptor.TransactionProxyFactoryBean)
target
transactionManager
transactionAttributes

事务的传播属性,七种
调用者:调用当前方法的方法
当前方法:声明事务属性的方法

PROPAGATION_REQUIRED:如果存在一个事务,则支持当前事务。
如果没有事务则开启一个新的事务。

PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。
如果没有事务,则非事务的执行。

PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。
如果没有一个活动的事务,则抛出异常。

PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。
如果一个事务已经存在,则将这个存在的事务挂起。

PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。

PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常

PROPAGATION_NESTED: 如果一个活动的事务存在,则运行在一个嵌套的事务中.
如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

JdbcTemplate
JdbcTemplate 的API
更新
查询

如果使用Spring 提供的事务管理器 , 你必须使用 Template


六、Spring对 Hibernate 的支持
1) HibernateTemplate
2) 提供声明的事务管理
3) LocalSessionFactoryBean(org.springframework.orm.hibernate3.LocalSessionFactoryBean)
dataSource

应用的步骤(与JDBC有三点不同)

1)HibernateAccountDao extends HibernateDaoSupport
setSessionFactory()
getHibernateTemplate()

2)事务管理器使用 HibernateTransactionManager(org.springframework.orm.hibernate3.HibernateTransactionManager)

3)使用 LocalSessionFactoryBean 获得SessionFactory


1.SpringDAO,SpringORM给持久层带来的好处:
省去try catch代码,事务、异常自动处理
2.访问数据源的两种方法(b/s,c/s):
dataSource:
JDBC Driver JNDI
7.事务的五个属性:
传播性、只读、


day5

Struts1.x流程:
B(浏览器)---->ActionServlet-->RequestProcessor-->Action-->JavaBean-->DB
request ↓ <-- <-- <--
struts-config.xml


七、在web 应用中使用Spring
概述:
Spring 提供监听器,在应用部署时构造ApplicationContext
ApplicationContext 对象会被绑定在 servlet context 中
Spring 提供了API获得servlet context 中的ApplicationContext

实施步骤:
实现一个web应用,区分 mvc 。

然后,使用spring 管理model :
1) 配置监听器加载上下文
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
2) 在Servlet中获得上下文
WebApplicationContext context=
WebApplicationContextUtils
.getWebApplicationContext(this.getServletContext());

-------------------------

八、对Struts 的支持
辅助 Action 获得 model 对象
两种选择:
Action 不受Spring 管理
Spring为Action 获得 applicationContext 提供支持
Action 受 Spring 管理,
容器为Action注入依赖的 model 对象
使用Spring 的RequestProcessor 或 Action 代理实现


与Struts 集成的两种选择:
1 spring 不管理Action
那只需要关注 Action 怎样获得上下文,两种方式可选择
1) 仍然通过 WebApplicationContextUtils 获得
WebApplicationContextUtils.getWebApplicationContext(
this.getServlet().getServletContext());
2)XxAction extends ActionSupport
继承了一个方法 :getWebApplicationContext
令外可选择 :
DispatchActionSuport
LookupDispatchActionSupport
MappingDispatchActionSupport

优点:结构清楚简单,容易理解

2 让 Spring 管理 Action
把 Action 做为 bean 配置
这样就可以注入Action 依赖的 model 对象了

实现机制,有两种:
改变 RequestProcessor 创建 Action的行为
改由上下文中获得 action
原理:覆盖 processActionCreate

所有请求都给一个特殊的Action,
此 Action execute 方法由上下文中获得 action
然后把处理行为委托给action
return action.execute()


Spring 给我们提供了这两种机制的实现

实施:
1) 把 Action 作为bean 配置,注入其依赖的model组件
applicationContext.xml :
<bean name="/actionpath" class="action class">
<property name="foo">
<ref bean="foo"/>
</property>
</bean>
struts-config.xml :
<action name="/actionpath" type="action class"/>
type 无效
即,等价于:
<action name="/actionpath" />
2) 选择 RequestProcessor 或者 Action ,
使其委托请求给 spring 管理的bean

A)使用DelegatingRequestProcessor
<controller processorClass=
"org.springframework.web.struts.DelegatingRequestProcessor"/>
B)使用 Action 的代理 DelegatingActionProxy
<action path="/actionpath"
type="org.springframework.web.struts.DelegatingActionProxy"/>


Spring Security(安全)
比较JAAS与SpringSecurity
JAAS SpringSecurity
与具体的 web容器有关 与具体web容器无关(技术:IOC/AOP)


推荐书籍(学完这课程之后再看):
Spring2.x(2.0/2.5)实例指南
Spring2企业级开发(图灵出版社)
spring_note.zip 笔记中为spring学习过程中spring的常规知识讲解,用于辅助源码阅读 立即下载

相关推荐

技术面试官视角:复盘北航/中科院/哈工大保研机试与面试,他们到底在考察什么?(附真题回忆与评分侧重点)

本文从技术面试官视角解析北航、中科院、哈工大等顶尖院校保研机试与面试的考核逻辑,揭示编程语言限制、题目难度设计等隐藏考察维度,并提供真题回忆与评分侧重点。帮助考生理解面试官的真实意图,掌握应对策略,提升通过率。

weixin_42549496的博客 518

spring学习总结

day1 什么是Spring? 开源、轻量级 Spring 特征: 1.B/S 和 C/S,使用资源小 2.对象间的关系松,高内聚,低耦合 IOC --- Inverse of control 使得业务组件都处在框架的管理之下 框架可以管理组件的创建和依赖关系 框架可以提供可以配置...

j2ee的学习 189

零代码实战:基于Coze平台打造测试用例生成AI助手

本文详细介绍了如何利用Coze平台零代码打造测试用例生成AI助手,通过智能体和工作流配置,实现需求文档自动解析与结构化测试用例生成。该方案显著提升测试效率,特别适合敏捷开发中频繁变更的需求场景,帮助测试工程师快速应对挑战。

weixin_42526015的博客 209

spring-note

使用注解实现事务

Cool__Xu的博客 336

Unity URP风格化水面Shader全流程实现与性能优化指南

在游戏开发中,Shader是实现特定视觉风格的核心技术,它通过编写在GPU上运行的程序,控制模型每个像素的最终颜色与光照表现。其原理在于对顶点位置、纹理坐标、光照信息及深度等数据进行一系列数学运算与插值。这项技术的价值在于能够以极高的自由度创造从写实到卡通的各种渲染效果,同时通过算法优化实现对硬件资源的精准控制。在移动游戏、独立游戏等对性能与风格化有强烈需求的场景中,自定义Shader尤为重要。本文聚焦于使用Unity URP渲染管线,从零构建一个高效的风格化水面Shader,详细拆解了深度色、波浪动画、边

weixin_34320724的博客 372

解决/usr/lib64/libstdc++.so.6和/lib64/libc.so.6版本过低问题

在CentOS7.0中编译好MySQL5.7.14之后,然后在CentOS6.5中初始化MySQL,执行:/usr/local/mysql/bin/mysqld --version出现如下问题:./bin/mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./bin/mysqld)

poxiaonie的博客 2万+

Spring v3.0.2 Learning Note 15 - Use Velocity Email Template with Spring

go on with Learning Note 14 - Send Email With SpringReference Library need add the following reference library files for velocity %SPRING_DEP%/org.apache.commons/com.springsource.org.apache.commons.collections/3.2.1/com.springsource.org.apache.commons.co

Wang Xiang's Blog 1051

计算机考研复试面试常问问题 数据结构篇(下)

计算机考研复试面试常问问题 数据结构篇(下) 使用前需知(拒绝白嫖,如果对你有帮助,你只需点个赞就行): 注意:有人在闲鱼上盗卖我的资料,而且还有很多同学买了,请各位擦亮双眼,我是整理出来免费分享给大家的! 大家请多点赞和评论,这样后面的同学更容易百度到,不至于被人盗卖,我就不加水印影响大家使用了! 第一次整理,度不好控制,有不好的地方希望大家理解,后面可能会改进,造福今年之后的同学们! ...

程序员宝藏的博客 1万+

NOTE:Spring

 2007-6-15____________________________________________________________________________________ 1.spring容器  spring容器就是IoC容器,用来实现反转控制的spring组件.在spring中提供了两种IoC容器:BeanFactory和ApplicationConte

Laurence的技术博客 4805

SCSA,scCATCH,SciBet,SingleR 四种注释方法比较

以下是和四种细胞类型注释方法的详细对比,从。

qq_40256654的博客 1216

Python-自动化绘制股票价格通道线

创建更强大、更可靠的价格通道检测算法。

探索人工智能领域 949

Chapter07 Spring中的事务 知识点总结Note

对一个查询操作来说,如果我们把它设置成只读,就能够明确告诉数据库,这个操作不涉及写操作。这样数据库就能够针对查询操作来进行优化。

weixin_54372875的博客 895

Python爬虫实战:爬取国家企业信用信息公示系统(最新反反爬技术解析)

在当今大数据时代,企业信用数据对于市场分析、风险评估和商业决策具有重要价值。国家企业信用信息公示系统作为官方权威的企业信息平台,包含了全国各类企业的注册信息、行政处罚、经营异常等关键数据。复杂的反爬机制(动态Token、验证码、请求频率限制)数据渲染方式多样(部分内容由JavaScript动态加载)法律与合规风险(需遵守《网络安全法》和网站Robots协议)本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的企业信用信息爬虫,并重点解析应对各种反爬策略的解决方案。

2201_76125261的博客 2700

NOTE:JAVA

 2007-6-15____________________________________________________________________________________ 1.spring容器  spring容器就是IoC容器,用来实现反转控制的spring组件.在spring中提供了两种IoC容器:BeanFactory和ApplicationContext

Laurence的技术博客 5245

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

spring-note-01

所需jar包: bean: 1 package com.myspring.bean; 2 3 public class User { 4 private String id; 5 private String name; 6 7 public String getId() { 8 return id; 9 ...

weixin_30807677的博客 96

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JAVAWEB-NOTE04:MyBatis、Spring、SpringMvc

文章目录@[toc] unit12-mybatis框架MyBatis简介(了解)什么是MyBatis为什么要使用MyBatisMyBatis快速入门准备数据,创建库和表创建工程,导入所需jar包、创建测试类添加mybatis-config.xml文件添加EmpMapper.xml文件添加并编写Emp实体类实现测试类,并测试 8888888888888MyBatis入门细节mybatis-config.xml配置文件EmpMapper.xml配置文件MyBatis增删改查新增员工修改员工删除员工mybatis

aa35434的博客 1191

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

brief note-2022

① 类修饰符应在 class 关键字之前② 抽象方法不能有方法体abstract 能用来修饰什么?类,方法,属性① abstract 与 private :不能联用private 修饰成员变量,成员方法:若用 abstract 修饰方法,则子类必须要实现该方法,而private 修饰的方法只能在本类中被使用,子类不能继承② abstract 与 final :不能联用final 修饰类,方法,变量,主要还是方法,final 修饰后的方法防止任何继承类修改其实现。

qq_43156556的博客 1650

Chapter04 手写IoC 知识点总结Note

我们通过注解的形式加载bean与实现依赖注入bean注解。

weixin_54372875的博客 449

spring mvc xss html,note/SpringMvc防御XSS实践.md at master · yangc91/note · GitHub

SpringMvc防御XSS实践项目在漏洞扫描时发现xss漏洞, 本以为是常见漏洞,网上有很多解决方案,应该能很快搞定,但实际上文章看了不少,却并未找到十分“顺手”的解决方案。历经波折终于完成了一套自己想要的方案,现将过程分享出来,希望能帮助到遇到同样的问题人。方案目标:只配置一次,与业务接口无关过滤两种请求的参数:Content-Type为form表单(application/x-www-for...

weixin_32495691的博客 122
上一篇: 14. Struts2.x note
下一篇: 16. EJB note
dev_J2EE
博客等级 码龄18年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值