异常日志
- proxy: no session
懒加载错误 四种 解决方法: 1. 用一下 2. 强迫对象初始化 3. 关闭lazy="false" 4. openSessionInView
- org.springframework.validation.BeanPropertyBindingResult
JavaBean属性类型不匹配
Spring 框架 ------ 程序员的春天
为什么要使用AOP?
实现程序中的关注点代码与业务代码分离
关注点代码: 重复的代码
AOP变成的实现: JDK代理 或者 cglib代理
程序中的"事物控制"重复代码, 可以用AOP实现! 即只需要写一次, 运行时候动态注入业务方法上.
事物的管理
Jdbc技术: DataSourceTrancscationManager
Hibernate技术: HibernateTrancecationManager
编程式事务管理
jdbc代码:
Conn.setAutoCommit(false); //设置手动控制事物
hibernate代码:
session.beginTransaction; //开启一个事物
[细粒度事物控制, 可以对指定的方法, 指定的方法的某几行添加事物控制]
(比较灵活, 但开发起来比较繁琐, 每次都要开启, 提交, 回滚)
Spring 提供了声明式事务管理
Spring提供了对事物的控制的实现, 用户如果想用Spring的声明式事务管理, 只需要在配置文件中配置即可, 不想使用时直接移除配置. 这个实现了对控制的最大程度的解耦
Spring声明式事务管理, 核心实现就是基于Aop
粗力度的事物控制: 只能给整个方法应用事物, 不可以对方法的某几行应用事物
c3p0连接池, 编码方式实现, 方便理解xml配置
@Repository
@Resource
@Transactional
// 1. 硬编码方式实现连接池
@Test
public void testDbcp() throws Exception {
// DBCP连接池核心类
BasicDataSource dataSouce = new BasicDataSource();
// 连接池参数配置:初始化连接数、最大连接数 / 连接字符串、驱动、用户、密码
dataSouce.setUrl("jdbc:mysql:///jdbc_demo"); //数据库连接字符串
dataSouce.setDriverClassName("com.mysql.jdbc.Driver"); //数据库驱动
dataSouce.setUsername("root"); //数据库连接用户
dataSouce.setPassword("root"); //数据库连接密码
dataSouce.setInitialSize(3); // 初始化连接
dataSouce.setMaxActive(6); // 最大连接
dataSouce.setMaxIdle(3000); // 最大空闲时间
// 获取连接
Connection con = dataSouce.getConnection();
con.prepareStatement("delete from admin where id=3").executeUpdate();
// 关闭
con.close();
}
Springmvc
Springmvc工作流:
- request(请求)
- Handler Mapping(映射器BeanNameUrlHandlerMapping)
- Controller(适配器SimpleServletHandlerAdapter)
- ModelAndView(Action)
- ViewResolver(视图解析器InternalResourceViewResolver)
- view(视图)
springmvc工作流.png
SpringMVC配置自定义格式处理器 如:处理日期时间
/**
* 自定义类型转换器, 将String->Date类型(格式yyyy-MM-dd) short full long 中间 default
*/
@Override
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
//向SpringMvc内部注册一个自定义的类型转化器
//参数一:将String转换成什么类型的字节码
//参数二:属性编辑器,自定义转换规则
binder.registerCustomEditor(
Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));//true 可以为空
}
网友评论