使用表达式配置切入点:
常用的表达式:
execution(“* cn.itcast.aop.Book.add(..)”)
execution(“* cn.itcast.aop.Book.(..)”)
execution(“ .(..)”)
—
配置切面的方法:
<aop:config>
<aop:poingcut id="pointcut1" expresson="cn...(此处为需要添加前置方法的方法)"></aop:pointcut>
<aop:aspect ref="beforeMethod"(此处为上面配置过的目标类)>
<aop:before method="say"(此处为要执行那个前置方法) pointcut-ref="pointcut1"></aop:before>
</aop:aspect>
</aop:config>
配置环绕的方法
<aop:before method="before1" pointcut-ref="pointcut1"/>
<aop:after-returning method="after1" pointcut-ref="pointcut1"/>
<aop:around method="around" pointcut-ref="pointcut1"/>
public void around1(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
sout("方法之前");
proceedingJoinPoint.proceed();
sout("方法之后");
}
导入log4j
log4j.properties放到src目录下面
设置日志级别
log4j.rootLogger=info , stdout 基本信息级别
log4j.rootLogger=debug , stdout详细信息级别
—
- Struts2框架应用在javaee中web层
- Struts2框架在Struts1和webwork基础上发展的全新框架
-
struts可以解决的问题:
配置:
```
/hellp.jsp
访问路径:127.0.0.1/struts2_day01/hello.action
配置过滤器:
web.xml中配置
strut2
</filter>
structs2
/*
</filter>
result标签:
根据action的方法返回值,配置到不同的路径里面
/hello.jsp
默认转发,地址栏不变
```
分模块开发:引入xml文件,开发中最常见的方式
```
```
action的编写方式有三种
```
第一种:创建普通类,这个类不继承任何类,也不实现任何接口.
第二种:创建类实现Action接口(要实现接口,接口中方法必须实现,所以这种用的不多)
第三种:创建类,继承ActionSupport
```
访问action的方法:
```
有三种方式实现,主要前面两种方式
1. 使用action标签中的method属性,在这个属性里写执行的action方法
2. 使用通配符的方式实现
3. 动态访问方式(不用)
```
演示错误:
```
如果action中有返回值,在配置文件中没有配置, 出现错误.
no result defined for action and result ok
没有返回值,就return Action.NONE
```
```
Action的方法访问
1.这是第一种实现方式,但不适合方法多的项目
2.第二种,通配符方法:{1}用来去*的值
```
基于aspectj的注解
```
增强方法,创建对象,jnx;aop配置,配置切面,用注解方式实现
1.创建对象
2.在spring核心配置文件中,开启aop扫描操作
3.在增强的类上面完成注解
@Before(value = "execution(* com.Spring_aop.Book.*(..))")
```
Spring的jdbcTemplate操作
1.spring框架一站式框架
- 1.针对三层,每一层都有解决技术
- 2.在dao层,使用jdbcTemplate
3.jdbcTemplate的使用和dbutils使用很相似,都是对数据库进行crud操作.
```
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/spring");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("admin");
//2.创建jdbc模板对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(driverManagerDataSource);
//3.调用里面的方法
String sql = "insert into test values(?,?)";
//String sql = "update test set password = ? where username=?";
//String sql = "delete from test where username=?";
int rows = jdbcTemplate.update(sql,"lucy","350");
```
---
```
QueryRunner qr = new QueryRunner(datasource);
返回对象
runner.query(sql,new BeanHandler.class)
返回list
runner.query(sql,new BeanListHandler.class)
在dbutils时候,有接口ResultSetHandler
dbutils提供了不同结果实现类
2. jdbcTemplate实现查询,有接口RowMapper
jdbcTemplate针对这个接口没有实现类,得到不同的数据需要自己进行数据的封装
```
```
查询的具体实现
1.查询返回某一个值
select count(*) from test
String sql = "select count(*) from test";
Integer count = jdbcTemplate.queryForObject(sql,Integer.class);
2.查询返回某一个对象
User user = jdbcTemplate.queryForObject(sql,new MyRowMapper(),"a");
class MyRowMapper implements RowMapper{
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
String username = resultSet.getString("username");
String password = resultSet.getString("password");
User user = new User();
user.setName(username);
user.setPassword(password);
return user;
}
}
3.查询返回list
String sql = "select * from test";
List list = jdbcTemplate.query(sql,new MyRowMapper());
```
---
String配置连接池和dao使用jdbcTemplate
```
1.Spring配置c3p0连接池
jar:c3p0,mchange-commons
2.创建Spring的配置文件,将一下代码配入配置文件中
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/spring");
dataSource.setUser("root");
dataSource.setPassword("admin");
```
将上面的代码用xml实现
```
</beans>
```
Spring事务管理
```
事务相关的概念
1.要么都成功,要么都失败
2.特性:原子性,一致性,隔离性,持久性
3.不考虑隔离性,会产生三个不可读的问题
解决读问题:设置隔离级别
Spring进行事务管理
api:
哪些类,那些接口
两种方式:
1. 编程式事务管理(不用)
2. 声明式事务管理(主要)
xml配置和注解实现
2.事务管理中的api:
事务管理器:接口:PlatformTransactionManager
Spring为不同的持久化框架都提供了不同的platformTransactionManager接口实现
```
```
搭建转账环境
service又叫做业务逻辑层
1.创建数据库表,添加数据
```