if(ckecks[i].cheacked==true)
string+=checks[i].value+”,”;
}
隐藏表单域提交到后台
document.getElementById(“string”).value=string;
后端通过String的slit(regex)以regex表示的符号切割长字符串为字符串数组
长整数分位显示;long最长为19位
转为字符串以后,StringBuffer的reverse()先反序
POI组件将数据导出到Excel表
response.setContentType(“application/vnd.ms-excel”);
ServletOutputStream out=response.getOutputStream();
HSSFWorkbook wb=new HSSFWorkbook();//创建excel表格
HSSFSheet sheet=wb.createSheet(“数据”);//创建工作簿
sheet.setColumnWidth(4,5000);//设置列宽
HSSFRow titileRow=sheet.createRow(0);//标题行
HSSFCell titleCell=titleRow.createCell(0);//标题行的第一个单元格
titileCell.setCellValue(“用户名”);
…n个单元格
HSSFRow valueRow=sheet.createRow(1);//创建第二行
…对应n个单元格且设值
wb.write(out);out.flush();out.close();
过滤器:防盗链,日志记录,字符替换,异常捕获,用户及权限验证,字符编码,弹出对话框形式的公告信息,文件上传
项目安全性:
攻击性安全:input框JS验证,java代替重复校验,避免非法字符和空格和SQL注入;特殊模块如登录时生成验证码,支付时产生随机码,都有时间限制
访问安全:页面静态化,使用缓存,减小服务器压力
数据安全:数据库敏感数据加密后存储;数据库读写分离;备份
JDBC
Driver:加载数据库驱动 (jar包);Class.forName(“”)
DiverManager:管理JDBC驱动服务类,获得数据库连接 :DiverManager.getConnection(url,user,password)
Connection:数据库连接对象,创建Statement对象
Statement createStaetment();
PrepareStatement prepareStatement(sql);
CallableStatement prepareCall(sql);
Savepoint setSavepoint([name]);//创建保存点
void setTransactionIsolation(level);// 设置事务隔离级别
void rollback([savepoint]);//回滚(到保存点)
void setAutoCommit(boolean);//关闭自动提交,打开事务;因为Connection默认会自动提交,即关闭事务
void commit();//提交事务
Statement(执行SQL语句 ,涉及批量更新方法)-PreparedStatement(安全,防SQL注入 (如永真表达式),in参数,占位符,预编译SQL语句 即下面的方法不传入sql参数,新增void setXxx(parameterIndex,value))-CallableStatement(out参数,调用存储过程):
ResultSet excuteQuery(sql);操作结果集
操作指针指向数据:absolute(row)row行;beforeFirst()初始状态,首行之前;first()首;previous()上一行;next()下一行;last()尾行;afterLast()尾行之后
然后通过索引或列名(推荐)获得列数据:getXxx(index/string)
boolean excute(sql);
int excuteUpdate(sql);//受影响行数为0或没有结果,返回false
结果集从1开始;可回滚;
回收和关闭资源
SQLException:应用无法连接数据库;查询语法错误;查询目标表或列不存在;插入或更新的数据违反数据库约束
处理Blob(二进制长对象如图片,声音文件)类型数据:PrepareStatement的setBinaryStream(parameterIndex,inputStream)保存Blob数据到数据库;ResultSet的getBlob(columnIndex)取出得到Blob对象,对象的getBytes()获取数据,或getBinaryStream()获取数据的输入流
最佳实践:批量操作;使用PreparedStatement避免SQL异常;使用数据库连接池;通过列名获取结果集而不是下标;
模板:消除冗长的JDBC编码
JdbcTemplate(推荐):基于索引参数的查询;NamedParameterJdbcTemplate:值以命名参数形式绑定到SQL;SimpleJdbcTemplate(废弃):自动装箱、泛型和可变参数
构建以dataSource为参数且返回模板对象的模板bean
tx:annotation-driven:事务驱动(spring通过AOP实现事务的根本原因);配合AOP配置相关事务操作
实现DataSource的bean(使用配置中的参数)的Connection,Statament以及CURD,ResultSet @Repository(标注参与数据库操作的bean)的bean中引入模板类,在@Inject处自动注入;执行CURD方法(提供参数即可,模板类自动获取连接、创建语句和执行SQL)
MySql
数据库三范式
1NF
列的原子性(列不可再分)
2NF
先满足1NF,然后表必有主键,其他列必完全依赖主键
3NF
先满足2NF,然后非主键列直接依赖主键,消除传递依赖
事务propagation管理insert,update,delete,ACID特性
原子性
不可分割,即事务是应用的最小执行单位要么都执行,要么都不执行(回滚后数据状态与事务执行之前一致)
一致性
事务从一种一致的状态到另一种一致的状态
隔离性 :并发的各个事务的执行互不干扰;5个隔离性
默认default
读未提交read_uncommitted
事务1可以操作还未提交的事务2 ;隔离性最低(不能避免脏读等所有问题),并发性高
读已提交read_committed
事务1不可以操作未提交的事务2;防止脏读 (指修改但未提交的数据,之后事务2回滚了,事务1读到脏数据)
读可重复 repeatable_read(默认)
防止脏读、不可重复读 (指事务1读取数据后,事务2修改数据并提交,事务1再次读取而数据不一致)
串行化serializable
严格的事务隔离,事务串行执行;级别最高,避免脏读,不可重复读,幻/虚读 (指事务2增加了数据并提交,事务1会感觉貌似多了些数据)
持久性
提交后永久存储(数据库操作完成后都应该commit(),失败后rollback())
事务控制(begin/start transaction,commit,rollback…);自动提交或手动提交(begin-rollback-commit)
传播行为
PROPAGATION_REQUIRED(默认)
支持当前事务(如果没有则新建)
PROPAGATION_SUPPORTS
支持当前事务(如果没有则以非事务方式执行)
PROPAGATION_MANDATORY
支持当前事务(如果没有则抛出异常)
PROPAGATION_REQUIRES_NEW
总是开启新事务(如果存在则当前事务挂起)
PROPAGATION_NOT_SUPPORTED
总以非事务方式执行(如果存在挂起)
PROPAGATION_NEVER
以非事务方式执行(如果存在则抛出异常)
默认值为0-5;(java类TransactionDefinition新添了中自定义的初始值为6)PROPAGATION_NESTED—事务存在,则嵌套事务执行
只读:
事务超时:
mysql有存储引擎如MyISAM(默认),InnoDM,MEMOORY,MERGE,它们各有支持如存储限制、事务安全、锁机制、各种索引类型、数据缓存、数据压缩、内存使用、外键等
基本关系(表):实际表,对实际存储数据的逻辑表示
查询表:查询结果
视图表:由基本表或视图表导出的虚表
关系操作:查query,插insert,删delete,改update
完整性约束:实体完整性(主键不为空)+参照完整性(外键为空或另一个表的主键)+用户定义完整性(SQL约束列表)
标准语言SQL(structured query language):
select [*/all/distinct] 目标列表达式列表 from 表名/视图名列表/(selcte子句) [as..]
[ where 条件表达式 ](根据where条件从from指定集中选出元组并按照select的要求形成结果)
[ group by 列名 [having 条件表达式]](按列名的值分组,值等为一组;分组后having限制(聚集函数作用于每一组)满足条件的组才输出)
[ order by 列名 [asc/desc]]
条件表达式:=,>...,!=,between.and,in,like,is null,and,or以及not配合
like字符匹配,字符模糊%(任意长度字符)和_(任意单个字符)
函数
(聚集只能用于select后或having后面)数值函数
count(),sum(),avg(),max(),min()
abs(),cell(),floor(),mod()
rand()0-1随机数
round(n,count)四舍五入保留指定位数
truncate(n,count)截取为指定位数
字符串函数
concat(str1…strn),lower/upper(str)
left/right(str,count);//返回字符串左/右边的指定个字符
insert(str,fromIndex,count,newstr);//替换
lpad/rpad(str,count,fillstr);//从左/右填充指定个字符
ltrim/rtrim/trim(str);//去空格
repeat(str,count);//重复指定次
replace(str,oldChar,newChar);//替换所有oldChar
strcmp(str1,str1);//比较
substring(str,fromIndex,count);//截取
日期函数
curdate()/curtime()/now()://当前日期、时间、日期时间
year/monthname/week(date)://年、月、年的第几周
hour/minute(time)://时、分
date_format(date,fmt)
date_add(date,intervalExpressionType)
datediff(date1,date2);//天数差
流程函数
if(value,t,f);//如果value真,返回t,否则返回f
ifnull(value1,value2);//如果value1不null则返回,否则返回value2
case [expression] when [value1/expression] then [result1]…else [default] end;//如果[表达式结果等于]value1真,返回result1,否则default;可以多个when…then
其他函数
datebase()数据库名,version()版本,user()用户名,inet_ation(ip)ip地址的数字表示,inet_ntop(num)数字表示的IP地址,password(str)加密,MD5()
几种查询
连接查询
等值/非等值连接:选出满足条件的元组数据并拼接成在一起
from 表列表 where 表1.字段=(等连接词)表2;可自连接(别名区分)
外连接:选出左表/右表所有元组并拼接右表/左表满足条件的元组数据,不满足的元组显示数据为null
嵌套查询
在where或having中嵌套查询块(select..from..where)
嵌套条件:=(等比较运算符,要求内存查询返回的一定是单个值),in(结果集),any/some/all(多值),exists
集合查询
对查询结果的并union,交intersect,差except
基于派生表(中间表)的查询
子查询位于from后
数据操作manipulation:DML
增
inser into 表名 [列名列表] values(值列表)
删
delete from 表名 [where ...]
每次删一行数据;删除操作被作为事务保存在日志,日后可回滚;没有条件则删除表中所有数据,等同于truncate table 表名;//一次性永久性删除表中所有行而不记录单个行删除操作;不会激活触发器;速度快;不回滚
drop
删除数据和表格;隐式提交,不回滚;同truncate属于DDL语言;速度最快
改
update 表名 set 列名=值(列表) where ...
模式=表+视图+索引;
约束:primary key,unique,not null,foreign key..references..,;
建:
create schema 名...,数据库的命名空间
create table 名(列名 数据类型 列级完整性约束条件,...)
数据类型
数值
严格数值
integer/int(4字节),smallint(2),decimal/dec,numeric
近似数值
float(4),real,double(8)
不同长度
tinyint(1),mediumint(3),bigint(8)
位bit
区别SQL中int(数字),表示数字宽度,默认int(11)
日期时间
1000年以后:日期date(4),日期时间datetime(8)
1970年以后:当前系统日期时间且格式化timestamp(4),时间time(3)
1901以后:year(1)
字符串
char(0-255定长即删除尾部空格),varchar(0-65535变长即保存尾部空格),tinblob(0-255),mediumblob,blob(0-65535),longblob,text同理
二进制字符串binary(n定长),varcharninary(n变长)
enum,set
create view 名;当定义主键/唯一/外键约束时会自动创建对应索引
create [unique索引值对应唯一数据记录] [cluster聚簇索引] index 名 on tableName(列名[(字节数)])(列名列表且asc/desc)
索引 :为经常需要查询的列建立索引;单列索引和组合索引(一个索引包含多列);出现在where子句而不是select后的列适合建索引;列基数越大的适合(如性别列基数太小);列值为字符串的,使用短索引即前缀遍历;索引增加额外存储空间,降低写操作性能,修改表时更新或重构费时
索引类型:
顺序文件上的索引:针对记录值按升序或降序存储的记录创建的顺序索引文件
B+树索引:动态平衡
散列索引:查找快
位图索引
或者分为唯一索引 (列或列组合建立的索引,值不重复,可为空),非唯一索引,主键索引 (建立索引的列为主键,唯一),聚(集)簇索引 (表中数据物理顺序和索引的排列顺序一致,唯一)
优点:加速查询;缺点:增加开销(维护索引尤其在记录的CURD时)和增加空间(来存储索引信息 )
drop schema/index/view 名 [on tableName;mysql要求一个表中索引不能同名]
drop table 名 [restrict默认有限制即若有依赖对象则表不能删除/cascade无限制,即依赖对象全被删除]
限制表示表存在依赖对象如被其他表约束引用,存在索引、视图、触发器、存储过程、函数等
视图、存储过程、函数不被删除但失效
添加列:alter table student add [column] 新列名 数据类型;(数据默认空值填充)
修改数据类型:alter table student alter column Sage INT
添加约束:alter table student add unique(Sage)
改索引名:alter index 名 rename to 新名
触发器:特殊的定义在关系表上的一类由事件驱动的存储过程;保存在数据库服务器,自动激活调用;是更灵活,可实施更复杂的检查和操作,更精细和强大的数据控制能力的约束;预编译;
create trigger 名
befor/after 触发事件insert/update/delete on 表名
referencing new/old row as 变量名
for each row/statement //类型:行级触发和语句级触发
[when 触发条件] 触发动作insert/update/delete
数据库连接池:服务器启动---建立一定数量的池连接,并一直维持不少于此数目的池连接---客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙;如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定;当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接;
DBCP稳定,C3P0性能高
数据库设计步骤:需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行与维护
SQL优化:
少使用*而具体写出需要返回的字段即不要全表扫描,减少语句解析;
外键使用索引,避免在where子句中有索引的字段进行运算而导致索引失效;
在where及order by设计的列建立索引;
表中字段避免null而应设默认值;避免在where子句中对字段进行null值判断和表达式操作,这导致引擎放弃索引而全表扫描;
>=代替>(后者查询后比较,前者直接查询);
尽量多commit()即分段批量提交;
批量sql操作如删除id in(1,2,3)而不是三条删除语句;
存储过程减少数据库访问次数;特殊时候truncate替换delete;
in中的常量存储在一个数组且排好了序,in中包含的数值不应过多;对连续的数字,尽量用between;
当只需要一条数据时,使用limit 1;
排序的字段没用到索引,则少排序;
union all 代替union;
in适合外表大而内表小的情况(in先执行子查询,即以内表为驱动);exists反之(以外表为驱动表,先访问);推荐not exists而不是not in,not in可能存在逻辑问题;
left join以左表为驱动表,所以左表应小;同理right join;inner join会自动以数据少的表为驱动表,推荐;
分段查询:查询范围过大时,分段查询后,结果合并;
不推荐前置“%”的模糊查询,这导致索引失效而全表扫描;可使用全文索引;
联合索引遵循最左前缀法则:常用的查询字段放在最前;从左到右出现的子集索引可以如同联合索引,否则不行,如联合索引(1,2,3)可以等同(1,2)但(2,3)无法使用此索引;
常见数据错报错:
参数max_connections默认151;报错too many connections;
从库与主库数据冲突:
4.学生-课程数据库
学生表:Student(Sno,Sname,Ssex,Sage,Sdept系);
课程表:Course(Cno,Cname,Cpno,Ccredit学分);
成绩/学生选课表:SC(Sno,Cno,Grade);
建表:
CREATE TABLE Student (Sno char(9) PRIMARY KEY ,Sname varchar(20) union,Ssex char(2),Sage SMALLINT,Sdept char(20));
Create table Course(Cno char(4) PRIMARY KEY ,Cname char(40) not null,Cpno char(4),Ccredit smallint,FOREIGN KEY(Cno) references Course(Cno) );
Create table SC(Sno char(9),Cno char(4),Grade smallint,primary key(Sno,Cno),foreign key(Cno) references Course(Cno));
查询:
出生年份:
当前年份-Sage;
查询既不是CS系,MA系,IS系的学生:
select Sname form student where Sdept not in(“CS”,”MA”,”IS”);
查询选了3门以上课程的学生学号
select Sno from SC group by Sno having count(*)>3;
查询平均成绩>=90分的学生学号和平均成绩
select Sno,avg(Grade) from SC group by Sno having avg(Grade>=90);//只涉及SC表
查询选修课程2且该课程成绩大于90分的学生学号和姓名
select Student.Sno,Sname from Student,SC where Student.Sno=SC.Sno and SC.Cno=’2’ and SC.Grade>90;//涉及Student表和SC表,等值连接
查询选修课程语文的学生学号和姓名
select Sno,Sname from Student where Sno in(select Sno from SC where Cno in(select Cno from Course where Cname=’语文’));//课程名属于Course,学号和姓名属于Student,两表没有直接联系,需通过SC表连接;先查课程为语文的课程号Cno,再查选了Cno的学生号Sno,最后取出Sno和Sname;
它的等值连接查询(推荐):select Student.Sno,Sname from Student,SC,Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno and Course.Cname=’语文’;
查询选了课程1号的学生姓名
select Sname from Student where exists (select * from SC where Sno=Student.Sno and Cno=’1’);
查询选了所有课程的学生姓名
select Sname from Student where not exists (select * from Course where not exists(select * from SC where Sno=Student.Sno and Cno=Course.Cno));
查询所有学生的学号,姓名,选课数,总成绩
select Student.Sno,Student.Sname,count(Cno),sum(Grade) from Student join SC on Student.Sno=SC.Sno group by Student.Sno,Sname;
查询所有课程成绩都<60分的学生学号和姓名
select Sno,Sname from Student where Sno not in(select Student.Sno from Student,SC where Student.Sno=SC.Sno and SC.Grade>60);
查询‘001’课程分数比‘002’课程高的学生学号
select a.Sno from (select sno, score from sc where cno=’001’ ) a,(select sno,score from sc where cno=’002’ ) b
where a.score>b.score and a.sno=b.sno;
查询姓李老师的人数
select count(distinct(tname)) from teacher where tname like ‘李%’;
用一个SQL语句查询N种数据:
select sum(case when table.salary>9999 and table.age>35 then 1 else 0 end) as “salary>9999 and age>35”,sum(case when table.salary……),… from table;
连接字符串(与null连接的都为null)
select concat(“str1”,”str2”,”str3”),concat(“str”,null)
查询工资,大于2000的显示”high”,否则显示”low”
select if(salary>2000,’high’,’low’) from …
select case when salary>2000 then ‘high’ else ‘low’ end from…
建索引
create index citys on city(cityName(10));
修改名为‘张’的薪水为5000,性别为‘男’
update tableName set salary=5000,sex=’男’ where name=’张’;
统计学生总分
select name,(chinese+math+english) as total from student;
工资多于张员工的员工信息
select * from employee where salary>(select salary form employee where name=’张’);
查询员工姓名及他的上司姓名
select 员工.name ,上司.name from employee 员工 left jion employee 上司 on 员工.上司编号id=上司.id;
查询雇佣时间小于其上司的员工姓名和上司姓名
select 员工.name,上司.name from employee 员工,employee上司 where 员工.上司id=上司.id and 员工.hireDate<上司.hireDate;
返回从事‘a’工作的员工姓名和所在部门
select 员工.name,dname from employee 员工,dept where 员工.job=’a’ and 员工.deptno=dept.deptno;
返回所有部门及部门最低工资
select deptno,min(salary) from employee group by deptno;
查询销售部的所有员工姓名
select ename from employee 员工,dept 部门 where 部门.dname=’销售部’ and 员工.deptno=(select deptno from dept where dname=’销售部’);
查询薪资水平多于平均薪资的员工
select * from employee where salary>(select avg(salary) from employee);//注意聚合函数(group function)不能放在where里即不能where salary>avg(salary)
查询与张从事相同工作的员工
selct * from employee where job=(select job from employee where ename=’张’) and ename!=’张’;//同一部门:where edeptno=(select edeptno from employee where ename=’张’) and ename!=’张’;
返回工资高于a部门所有员工的员工
select * from employee where salary> all(select salary from employee where edeptno=’a’);
借书系统
CARD 借书卡:CNO 卡号,NAME 姓名,CLASS 班级
BOOKS图书: BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数
BORROW借书记录: CNO 借书卡号,BNO 书号,RDATE 还书日期
16.查询借书超过5本的读者的借书卡号和册数
select cno,count(*) from borrow group by cno having count(*)>5;
查询借了水浒的读者的姓名和班级
select * from card c where exists(select * from borrow bo,books b where bo.bno=b.bno and b.bname=’水浒’ and bo.cno=c.cno);
查询过期未还图书的借书卡号,书号及归还日期
select * from borrow where rdate
查询借了a但没有借b的读者的借书卡号并降序
select bo.cno from borrow bo,books b
where bo.bno=b.bno and b.bname=’a’
and not exists(select * from borrow bo2,books b2 where bo2.bno=b2.bno and b2.bname=’b’ and bo2.cno=bo.cno)
grop by bo.cno desc
将001班同学的归还日期延长一周
update borrow set rdate=dateAdd(day,7,borrow.rdate) from card,borrow where card.cno=borrow.cno and card.class=’001’;
20. 删除无人借阅的图书记录
delete from books where not exists(select * from borrow where bno=books.bno);
21.建立视图显示001班借书信息
create view v as
select * from borrow bo,card c,books b where bo.cno=c.cno and bo.bno=b.bno and c.class=’001’
分页查询select * from table limit (start-1)*limit,limit;
去重:Mysql不能删除查询出来的记录的,而是通过一张临时表且保留一条记录:
delete from table where id in (select id from (select id from table where expect in (select expect from table group by expect having count(expect)>1) and id not in(select min(id) from table group by expect having count(expect)>1)) as tmpresult)
你可能感兴趣的:(javaWeb之一些基础:JavaScript,jQuery,Ajax,JSP,Servlet,MySQL,)
三菱PLC全套学习资料及应用手册
good2know
本文还有配套的精品资源,点击获取简介:三菱PLC作为工业自动化领域的核心设备,其系列产品的学习和应用需要全面深入的知识。本次资料包为学习者提供从基础到进阶的全方位学习资源,包括各种型号PLC的操作手册、编程指南、软件操作教程以及实际案例分析,旨在帮助用户系统掌握PLC的编程语言、指令系统及在各类工业应用中的实施。1.三菱PLC基础知识入门1.1PLC的基本概念可编程逻辑控制器(PLC)是工业自动化
移动端城市区县二级联动选择功能实现包
good2know
本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery
15个小技巧,让我的Windows电脑更好用了!
曹元_
01.桌面及文档处理第一部分的技巧,主要是围绕桌面的一些基本操作,包括主题设置、常用文档文件快捷打开的多种方式等等。主题换色默认情况下,我们的Win界面可能就是白色的文档界面,天蓝色的图表背景,说不出哪里不好看,但是就是觉得不够高级。imageimage说到高级感,本能第一反应就会和暗色模式联想起来,如果我们将整个界面换成黑夜模式的话,它会是这样的。imageimage更改主题颜色及暗色模式,我们
《极简思维》第三部分
小洋苏兮
整理你的人际关系如何改善人际关系?摘录:因为人际关系问题是人们生活中不快乐的主要原因。感想:感觉这个说的挺对,之前我总是埋头学习,不管舍友不管自己的合作伙伴的一些事情,但实际上,这学期关注了之后好多了摘录:“亲密关系与社交会让你健康而快乐。这是基础。太过于关注成就或不太关心人际关系的人都不怎么快乐。基本上来说,人类就是建立在人脉关系上的。”感想:但是如果有时想的太多就不太好,要以一个开放的心态跟别
我不懂什么是爱,但我给你全部我拥有的
香尧
因为怕黑,所以愿意陪伴在夜中行走的人,给他一点点的安全感。因为渴望温柔与爱,所以愿意为别的孩子付出爱与温柔。因为曾遭受侮辱和伤害,所以不以同样的方式施于其他人。如果你向别人出之以利刃,对方还了你爱与包容,真的不要感激他,真的不要赞美他。每一个被人伤害过的人心里都留下了一颗仇恨的种子,他也会想要有一天以眼还眼,以牙还牙。但他未让那颗种子生根发芽,他用一把心剑又一次刺向他自己,用他血荐仇恨,开出一朵温
SpringMVC执行流程(原理),通俗易懂
国服冰
SpringMVC spring mvc
SpringMVC执行流程(原理),通俗易懂一、图解SpringMVC流程二、进一步理解Springmvc的执行流程1、导入依赖2、建立展示的视图3、web.xml4、spring配置文件springmvc-servlet5、Controller6、tomcat配置7、访问的url8、视图页面一、图解SpringMVC流程图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提
现在发挥你的优势
爱生活的佑嘉
来和我做咨询的一些朋友,涉及到定位的,都会说,我不知道我的优势是什么,你能不能帮我看看?还有一些朋友,喜欢做各种测试来了解自己,测试过后,然并卵。今天,我想来聊聊优势,如何能了解自己的优势是什么。首先,我们要知道,如果要成为“不一般”的人,我们所做的事情,就要基于自身的优势。我做管理者十多年,看到每个员工都有不同的特长,有的擅长数字,有的擅长人际,有的擅长写作。这些知道自己优势并且在这方面刻意练习
别再讲道理啦,对方听不进去的
方所
我之前写过一篇叫做《你总妄想改变他人》,然后就有朋友跟我说,有一些方法可以改变他人之类的。嗯,是这样,但是任何具体的问题,都要限定好语境,描述清楚前提条件,然后再表达观点,我的这位朋友的说法就犯了一刀切的错误,这样并不能让讨论正常展开(这篇我得先给她看看,不然可能会挨揍)。好了,hhhh,谁让她不能写文章呢,我就来再说一说吧。我前面说过,我们在学到一个道理、学会一种方法之后,总是迫不及待地想要去与
Spring进阶 - SpringMVC实现原理之DispatcherServlet处理请求的过程
倾听铃的声
后端 spring java mvc 开发语言 分布式
前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet处理请求的过程的源码解析。本文是第二篇:DispatcherServlet处理请求的过程的源码解析。@pdaiSpring进阶-SpringMVC实现原理之DispatcherServlet处理请求的
2019-06-05
第十七把巴鲁克
今天去实验田里实习,见到了福寿螺真的可怕且牛皮,六级也快来了,说实话还是害怕。我昨天考了环工原理,真的太难了,太烦了,理工科真的难,烦。实验报告还是没写,要抓紧速度抓紧时间,还是应该学会努力学习,远离一些不上进的事物。
JVM 内存模型深度解析:原子性、可见性与有序性的实现
练习时长两年半的程序员小胡
JVM 深度剖析:从面试考点到生产实践 jvm java 内存模型
在了解了JVM的基础架构和类加载机制后,我们需要进一步探索Java程序在多线程环境下的内存交互规则。JVM内存模型(JavaMemoryModel,JMM)定义了线程和主内存之间的抽象关系,它通过规范共享变量的访问方式,解决了多线程并发时的数据一致性问题。本文将从内存模型的核心目标出发,详解原子性、可见性、有序性的实现机制,以及volatile、synchronized等关键字在其中的作用。一、J
Flowable 高级扩展:自定义元素与性能优化实战
练习时长两年半的程序员小胡
Flowable 流程引擎实战指南 流程图 flowable BPMN 流程引擎 java
在前五篇文章中,我们从基础概念、流程设计、API实战、SpringBoot集成,到外部系统协同,逐步构建了Flowable的应用体系。但企业级复杂场景中,原生功能往往难以满足定制化需求——比如需要特殊的审批规则网关、与决策引擎联动实现动态路由,或是在高并发场景下优化流程引擎性能。本文将聚焦Flowable的高级扩展能力,详解如何自定义流程元素、集成规则引擎,并掌握大型系统中的性能调优策略。一、自定
互信息:理论框架、跨学科应用与前沿进展
大千AI助手
人工智能 Python # OTHER 人工智能 深度学习 算法 互信息 香农 通信 随机变量
1.起源与核心定义互信息(MutualInformation,MI)由克劳德·香农(ClaudeShannon)在1948年开创性论文《AMathematicalTheoryofCommunication》中首次提出,该论文奠定了现代信息论的基础。互信息用于量化两个随机变量之间的统计依赖关系,定义为:若已知一个随机变量的取值,能为另一个随机变量提供的信息量。数学上,对于离散随机变量XXX和YYY,
恩小希美食成长日记之118:“摘星女神”王亚平归来,她的婚姻,治愈了多少职场女性的痛
恩小希
上周最为热闹的消息,无疑是神舟13号的三位航天英雄回来了.其中,最为瞩目的就是王亚平.她是我国首位进行太空行走的女航天员,也是为自己小女儿“摘星星的妈妈”。作为最受关注的职场妈妈,王亚平之所以能够成就这样一番事业,跟背后默默支持她的丈夫--赵鹏分不开。01王亚平1980年出生于山东烟台。父母都是地地道道的农民。王亚平这个姑娘从小体质好,一直练习长跑。高中时,空军来家乡招收女飞行员,作为体育班里唯一
SpringMVC的执行流程
1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,
2019-07-30
西域社群
天地之间,分外热闹。望热浪涛涛,引无数帅哥竞开撩,夕窈窕淑女皆露腰。一代天骄,群里热闹。不见美女露妖娆,唯见帅哥手机忙,唐诗宋词,广为流传,惜字如金,声情并茂。君悉吾析,今日之局有套路,昨日之生惹人恋。聚往矣,数风流人物还看今朝!!
车载刷写架构 --- 刷写思考扩展
汽车电子实验室
电子电器架构——刷写方案 架构 开发语言 关于网关转发性能引起的思考 汽车中央控制单元HPC软件架构 车载诊断进阶篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是系统思考、大胆设计、小心求证;三是“一张纸制度”,也就是无论多么复杂的工作内容,要在一张纸上描述清楚;四是要坚决反对虎头蛇尾,反对繁文缛节,反对老
在线人数统计业务设计(场景八股文)
业务问题在当经的网站中,在线人数的实时统计已经是一个必不可少的模块了,并且该统计功能最好能够按不同的时间间隔做的统计,现在需要你设计一个在线人数统计的模块,你应该怎么进行设计的呢?背景一个网校下会有多个学员。目前平台大概有十个,平台对应的网校大概五十几个,平均一个网校会有5w个用户,预计总人数为200w,最该学员的在线人数在10w左右。设计思路最开始的时候,想到的就是使用mysql直接实现,但是明
Aop +反射 实现方法版本动态切换
需求分析在做技术选型的时候一直存在着两个声音,mongo作为数据库比较mysql好,mysql做为该数据比mongo好。当然不同数据库都有有着自己的优势,我们在做技术选型的时候无非就是做到对数据库的扬长避短。mysql最大的优势就是支持事务,事务的五大特性保证的业务可靠性,随之而来的就是事务会产生的问题:脏读、幻读、不可重复度,当然我们也会使用不同的隔离级别来解决。(最典型的业务问题:银行存取钱)
【老房翻新】92平轻奢简约风,将和谐之美融入空间!
没人比我更懂装修
在客厅空间中,设计师于冷静的空间基调中选用了层次感丰富的黄蓝色作为主要跳色,搭配黑白纹理的地毯与单椅,为空间增加了时尚摩登的气息。艺术感的单品突出点亮了空间,绿植的点缀、留白的软饰则增强了空间的呼吸性。点击此处添加图片说明文字点击此处添加图片说明文字设计师力求使每一处的设立都在空间中达到相互间的呼应与制衡,将艺术的跃动之美赋于空间之上,也将空间的和谐之美融于生活之中。点击此处添加图片说明文字点击此
你对待万事万物的态度
行靜
昨晚爸爸把洒水壶灌满水,对我说:你也该去浇浇你阳台上的花咯。这么大的天气,几天没浇水都快死了。我才意识到自己容易突然间忽视一些事情。尤其是身旁的一些事,可能它们呆久了,反而习以为常。想想每天的生活状态就是在不断的重复着一些事,有点固定模式。没有什么特别发生。记录我的一天:上班,挤公交,用手机或电脑,吃饭,上课。没有
二十四节气组诗 谷雨
离陌_6639
图片来源网络,若侵犯了你的权益,请联系我删除6.谷雨文/离陌背上行囊背上如行囊的我从此任行程马不停蹄今天家乡的田野春雨快马加鞭播下希望的种子观音不语目送着我和夏天一道在观音山出关图片来源网络,若侵犯了你的权益,请联系我删除你好啊,我是离陌,已然在懵懂中走过了16年的岁月,为了珍惜当下的每一秒,所以立志做一名终身学习者。文学对于我来说是一种信仰,诗歌是我的生命。人生之道,四通八达,即入文学,自当持之
【 焦点咨询的“无为”】邹庆会,持续分享第690天,2020年1月23日
邹庆会
焦点课堂上,刘老师强调,焦点咨询师要“无为”,当时我就很困惑:我们“无为”,我们什么都不做,那来访者找我们做什么呢?那我们又怎么样来引领来访者呢?又怎么样让来访者在咨询当中有更多的收获呢?带着这个困惑,我逐渐在咨询中,包括在陪伴儿子的过程中,试着慢慢地放下期待、忘掉技术,寻找“无为”的感觉,寻找“无为”的痕迹,以及“无为”之后的一些效果的呈现。也慢慢的悟出一些自己的感受和体会。就像《道德经》中所说
营销活动-大转盘
無缺520
写在前面最近,首先营销活动工具这块我是再熟悉不过了。曾经做了不下20个活动工具,然后通过监控活动数据反推活动的好坏。文中主要讲解幸运大转盘营销工具一.大转盘定义大转盘是比较常见的营销活动工具,它是通过消费者用户控制【开始/停止】操作获得奖品物品。用户在不知道自己能获得什么奖品的条件下,然后通过抽奖,大概率的获得未知的奖品。类似最近流行的盲盒玩法。二.为什么做大转盘大转盘是最常用的抽奖类的活动工具之
践行8.0~第六周11.25-12.02
初队长
突破后的喜悦最可怕的不是自己不清楚,而是自己清楚了,却依然不心动,我想这就是我们每个人的惰性存在,在这一周的践行,我发现自己依然是停留在自己的模式当中,不断的恶性的轮回,虽然的话,那再晨间日记方面是纸质的填写,但是对一天的工作没有起到应有的计划和推动的作用而我自己呢,也有些时候的话会处于一个相对来讲放松的一个状态,时间的把控的话也有一些点的消极,所以在这周的间隙,重点是关注自己的三大目标为目标来进
STM32入门之TIM基本定时器
嵌入式白话
STM32入门学习 stm32 嵌入式硬件 单片机
一、定时器简介定时器是嵌入式系统中的关键外设之一,它可以用于生成精确的延时、周期性中断、PWM波形生成等功能。在STM32F1系列单片机中,定时器不仅能为系统提供精确的时钟,还支持外部事件的捕获以及信号输出。对于定时器的功能,我们可以通过一个生活中非常常见的例子来形象地描述:微波炉的定时器。想象你正在使用微波炉加热食物。在微波炉里,定时器的作用就是帮助你控制食物加热的时间。当你设置了加热时间后,定
我最喜欢的公众号
素颜创始人小云
一年多前,也是因为工作的原因。认识了她,她是我七个人物法其一,她在我心里也是很敬佩的一个女孩子。她会讲一些护肤知识,哪些产品好用哪些不好用而他讲解的产品都是我跃跃欲试的。图片发自App她做的每一篇文章都很精美,可以吸引到我从头看到尾,看每一个字都会很珍惜很期待,做事也特别的认真仔细。去年出了一本《活得漂亮》我也看了她的创业故事,很厉害!她的认真及敬业精神我觉得是很难学得来的,现在怀孕3个月了,依然
收集落叶
申文秀
走啊,一起走,我们一起去收集落叶落叶的模样早已映入我的眼帘耳边已响起叶子落在地上的“沙沙”声走啊,去收集落叶,落叶是我们的回忆落叶的样子如此俏皮心形是写给秋姑娘的情书圆形是秋姑娘送给大地的礼物三角形是秋姑娘礼服上的碎珠片哟!秋姑娘举行的盛装宴会开始了你看!秋之宴会开始了松叶缓缓飘落在空中跳起了华尔兹枫叶跳着芭蕾兜着圈子盘旋而下银杏叶是杂技演员,正“七上八下”地翻跟头每个落叶都在宴会上展示自己最美妙
婴童医话(五百六十)
妙手柯楠
探天地清浊之源,察阴阳顺逆之机。“乳食过饱蓄胃中,乳片不化吐频频,身热面黄腹膨胀。”伤乳吐者,因乳食过饱,停蓄胃中,以致运化不及,吐多乳片,犹如物盛满而上溢也。其证身热面黄,肚腹膨胀。治宜化其宿乳,安胃和中,节其乳食,自然止也。“过食伤胃腹胀热,恶食口臭吐酸粘,眼胞虚浮身潮热。”伤食吐者,因小儿饮食无节,过食油腻、面食等物,以致壅塞中脘而成也,其证肚腹胀热,恶食口臭,频吐酸粘,眼胞虚浮,身体潮热。
《自控力》P158
迷糊笑
作者:凯利•麦格尼格尔图片发自App金句:众多研究显示,自我批评会降低积极性和自控力,而且也是最容易导致抑郁的因素。它不仅耗尽了“我要做”的力量,还耗尽了“我想要”的力量。相反,自我同情则会提升积极性和自控力,比如,在压力和挫折面前支持自己、对自己好一些。感想:我当年抑郁是不是也是因为这样?图片发自App
安装数据库首次应用
Array_06
java oracle sql
可是为什么再一次失败之后就变成直接跳过那个要求
enter full pathname of java.exe的界面
这个java.exe是你的Oracle 11g安装目录中例如:【F:\app\chen\product\11.2.0\dbhome_1\jdk\jre\bin】下的java.exe 。不是你的电脑安装的java jdk下的java.exe!
注意第一次,使用SQL D
Weblogic Server Console密码修改和遗忘解决方法
bijian1013
Welogic
在工作中一同事将Weblogic的console的密码忘记了,通过网上查询资料解决,实践整理了一下。
一.修改Console密码
打开weblogic控制台,安全领域 --> myrealm -->&n
IllegalStateException: Cannot forward a response that is already committed
Cwind
java Servlets
对于初学者来说,一个常见的误解是:当调用 forward() 或者 sendRedirect() 时控制流将会自动跳出原函数。标题所示错误通常是基于此误解而引起的。 示例代码:
protected void doPost() {
if (someCondition) {
sendRedirect();
}
forward(); // Thi
基于流的装饰设计模式
木zi_鸣
设计模式
当想要对已有类的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有的功能,并提供加强功能。
自定义的类成为装饰类
模仿BufferedReader,对Reader进行包装,体现装饰设计模式
装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象功能,提供更强的功能。
装饰模式比继承灵活,避免继承臃肿,降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能该
Linux中的uniq命令
被触发
linux
Linux命令uniq的作用是过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行。在正常情 况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如 果输入文件用“- ”表示,则从标准输入读取。
AD:
uniq [选项] 文件
说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个
正则表达式Pattern
肆无忌惮_
Pattern
正则表达式是符合一定规则的表达式,用来专门操作字符串,对字符创进行匹配,切割,替换,获取。
例如,我们需要对QQ号码格式进行检验
规则是长度6~12位 不能0开头 只能是数字,我们可以一位一位进行比较,利用parseLong进行判断,或者是用正则表达式来匹配[1-9][0-9]{4,14} 或者 [1-9]\d{4,14}
&nbs
Oracle高级查询之OVER (PARTITION BY ..)
知了ing
oracle sql
一、rank()/dense_rank() over(partition by ...order by ...)
现在客户有这样一个需求,查询每个部门工资最高的雇员的信息,相信有一定oracle应用知识的同学都能写出下面的SQL语句:
select e.ename, e.job, e.sal, e.deptno
from scott.emp e,
(se
Python调试
矮蛋蛋
python pdb
原文地址:
http://blog.csdn.net/xuyuefei1988/article/details/19399137
1、下面网上收罗的资料初学者应该够用了,但对比IBM的Python 代码调试技巧:
IBM:包括 pdb 模块、利用 PyDev 和 Eclipse 集成进行调试、PyCharm 以及 Debug 日志进行调试:
http://www.ibm.com/d
webservice传递自定义对象时函数为空,以及boolean不对应的问题
alleni123
webservice
今天在客户端调用方法
NodeStatus status=iservice.getNodeStatus().
结果NodeStatus的属性都是null。
进行debug之后,发现服务器端返回的确实是有值的对象。
后来发现原来是因为在客户端,NodeStatus的setter全部被我删除了。
本来是因为逻辑上不需要在客户端使用setter, 结果改了之后竟然不能获取带属性值的
java如何干掉指针,又如何巧妙的通过引用来操作指针————>说的就是java指针
百合不是茶
C语言的强大在于可以直接操作指针的地址,通过改变指针的地址指向来达到更改地址的目的,又是由于c语言的指针过于强大,初学者很难掌握, java的出现解决了c,c++中指针的问题 java将指针封装在底层,开发人员是不能够去操作指针的地址,但是可以通过引用来间接的操作:
定义一个指针p来指向a的地址(&是地址符号):
Eclipse打不开,提示“An error has occurred.See the log file ***/.log”
bijian1013
eclipse
打开eclipse工作目录的\.metadata\.log文件,发现如下错误:
!ENTRY org.eclipse.osgi 4 0 2012-09-10 09:28:57.139
!MESSAGE Application error
!STACK 1
java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContai
spring aop实例annotation方法实现
bijian1013
java spring AOP annotation
在spring aop实例中我们通过配置xml文件来实现AOP,这里学习使用annotation来实现,使用annotation其实就是指明具体的aspect,pointcut和advice。1.申明一个切面(用一个类来实现)在这个切面里,包括了advice和pointcut
AdviceMethods.jav
[Velocity一]Velocity语法基础入门
bit1129
velocity
用户和开发人员参考文档
http://velocity.apache.org/engine/releases/velocity-1.7/developer-guide.html
注释
1.行级注释##
2.多行注释#* *#
变量定义
使用$开头的字符串是变量定义,例如$var1, $var2,
赋值
使用#set为变量赋值,例
【Kafka十一】关于Kafka的副本管理
bit1129
kafka
1. 关于request.required.acks
request.required.acks控制者Producer写请求的什么时候可以确认写成功,默认是0,
0表示即不进行确认即返回。
1表示Leader写成功即返回,此时还没有进行写数据同步到其它Follower Partition中
-1表示根据指定的最少Partition确认后才返回,这个在
Th
lua统计nginx内部变量数据
ronin47
lua nginx 统计
server {
listen 80;
server_name photo.domain.com;
location /{set $str $uri;
content_by_lua '
local url = ngx.var.uri
local res = ngx.location.capture(
java-11.二叉树中节点的最大距离
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class MaxLenInBinTree {
/*
a. 1
/ \
2 3
/ \ / \
4 5 6 7
max=4 pass "root"
Netty源码学习-ReadTimeoutHandler
bylijinnan
java netty
ReadTimeoutHandler的实现思路:
开启一个定时任务,如果在指定时间内没有接收到消息,则抛出ReadTimeoutException
这个异常的捕获,在开发中,交给跟在ReadTimeoutHandler后面的ChannelHandler,例如
private final ChannelHandler timeoutHandler =
new ReadTim
jquery验证上传文件样式及大小(好用)
cngolon
文件上传 jquery验证
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery1.8/jquery-1.8.0.
浏览器兼容【转】
cuishikuan
css 浏览器 IE
浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同
问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。
碰到频率:100%
解决方案:CSS里 *{margin:0;padding:0;}
备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设
Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
daizj
shell $# $? 特殊变量
前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:
$echo $$
运行结果
29949
特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个
程序设计KISS 原则-------KEEP IT SIMPLE, STUPID!
dcj3sjt126com
unix
翻到一本书,讲到编程一般原则是kiss:Keep It Simple, Stupid.对这个原则深有体会,其实不仅编程如此,而且系统架构也是如此。
KEEP IT SIMPLE, STUPID! 编写只做一件事情,并且要做好的程序;编写可以在一起工作的程序,编写处理文本流的程序,因为这是通用的接口。这就是UNIX哲学.所有的哲学真 正的浓缩为一个铁一样的定律,高明的工程师的神圣的“KISS 原
android Activity间List传值
dcj3sjt126com
Activity
第一个Activity:
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import a
tomcat 设置java虚拟机内存
eksliang
tomcat 内存设置
转载请出自出处:http://eksliang.iteye.com/blog/2117772
http://eksliang.iteye.com/
常见的内存溢出有以下两种:
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: Java heap space
------------
Android 数据库事务处理
gqdy365
android
使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。事
Java 打开浏览器
hw1287789687
打开网址 open浏览器 open browser 打开url 打开浏览器
使用java 语言如何打开浏览器呢?
我们先研究下在cmd窗口中,如何打开网址
使用IE 打开
D:\software\bin>cmd /c start iexplore http://hw1287789687.iteye.com/blog/2153709
使用火狐打开
D:\software\bin>cmd /c start firefox http://hw1287789
ReplaceGoogleCDN:将 Google CDN 替换为国内的 Chrome 插件
justjavac
chrome Google google api chrome插件
Chrome Web Store 安装地址: https://chrome.google.com/webstore/detail/replace-google-cdn/kpampjmfiopfpkkepbllemkibefkiice
由于众所周知的原因,只需替换一个域名就可以继续使用Google提供的前端公共库了。 同样,通过script标记引用这些资源,让网站访问速度瞬间提速吧
进程VS.线程
m635674608
线程
资料来源:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397567993007df355a3394da48f0bf14960f0c78753f000 1、Apache最早就是采用多进程模式 2、IIS服务器默认采用多线程模式 3、多进程优缺点 优点:
多进程模式最大
Linux下安装MemCached
字符串
memcached
前提准备:1. MemCached目前最新版本为:1.4.22,可以从官网下载到。2. MemCached依赖libevent,因此在安装MemCached之前需要先安装libevent。2.1 运行下面命令,查看系统是否已安装libevent。[root@SecurityCheck ~]# rpm -qa|grep libevent libevent-headers-1.4.13-4.el6.n
java设计模式之--jdk动态代理(实现aop编程)
Supanccy2013
java DAO 设计模式 AOP
与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。
&
Spring 4.2新特性-对java8默认方法(default method)定义Bean的支持
wiselyman
spring 4
2.1 默认方法(default method)
java8引入了一个default medthod;
用来扩展已有的接口,在对已有接口的使用不产生任何影响的情况下,添加扩展
使用default关键字
Spring 4.2支持加载在默认方法里声明的bean
2.2
将要被声明成bean的类
public class DemoService {