spring13-AspectJ

1. AspectJ

1.1. AspectJ介绍

AspectJ官网^4

AspectJ文档^1

1.1.1. pointcuts

pointcuts指的是程序中的某些链接点(某些时机),例如call(void Point.setX(int))表示:调用类PointsetX(int)方法时

pointcuts可以使用与或非表达式(||,&&,!)连接,比如 call(void Point.setX(int)) || call(void Point.setY(int))

pointcuts可以被定义为变量,如下面代码中的move()

1
2
3
4
5
6
pointcut move():
call(void FigureElement.setXY(int,int)) ||
call(void Point.setX(int)) ||
call(void Point.setY(int)) ||
call(void Line.setP1(Point)) ||
call(void Line.setP2(Point));

当然pointcuts定义的时候还可以使用通配符,比如call(void Figure.make*(..))代表Figure的以make开头且返回值为void的方法(不关心参数)调用的时候。比如call(public * Figure.* (..))代表Figure的任何方法(不关心方法名,参数,返回值)调用的时候。

阅读更多

spring11-Jdbctemplate

JdbcTemplate

测试写法

1
2
3
4
5
6
7
8
9
10
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
JdbcTemplate jdbcTemplate = applicationContext.getBean("jdbcTemplate",JdbcTemplate.class);
// 保存
jt.update("insert into account(name,money)values(?,?)","eee",3333f);
// 更新
jt.update("update account set name=?,money=? where id=?","test",4567,7);
// 删除
jt.update("delete from account where id=?",8);
// 查询
List<Account> account = jt.query("select * from account where money>?",new BeanPropertyRowMapper<Account>(Account.class),1000f);

DAO中的JdbcTemplate

上面的代码实际上只能用于简单的测试,我们正确的做法应该还是使用DAO实现,注意到使用DAO实现的时候肯定要在类中创建jdbcTemplate,如果我们有多个DAO就会导致份重复的代码,这时可以让他们继承一个JdbcDaoSupport来实现,而这个类spring又恰好为我们提供了。但是只能通过xml注入,你想要用注解注入的话就只能自己写一个。

spring9-动态代理

account案例

&emsp;&emsp; 我们有一个转账方法: 根据名称找到账户,转出账户减钱,转入账户加钱,更新转出账户,更新转入账户,这个方法没有事务的控制,可能出现问题

案例问题

&emsp;&emsp; 实际上我们需要维护一个和线程绑定的数据库连接,我们做一个工具类,让其支持回滚,于是我们在上诉案例中可以使用trycatch,一旦碰到问题,在catch中回滚即可,这个可以解决问题,但是太复杂了。

阅读更多

spring7-注解配置IOC

注解配置IOC

先总结一下之前的东西,曾经的XML配置,有标签id和class用于构造,有scope用来表示作用范围,有init-method和destroy-method用来表示生命周期,有property用来表示依赖注入

告知spring去扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<context:component-scan base-package="com.wsx.spring"></context:component-scan>
</beans>
阅读更多

spring5-XML配置IOC

XML配置IOC

使用默认构造函数创建Bean

在spring的配置文件中使用Bean标签, 只配置id个class属性

1
2
3
4
5
<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">
<bean id="myclass" class="com.wsx.spring.Myclass"></bean>
</beans>
阅读更多

spring4-创建IOC容器

创建IOC容器

ApplicationContest

单例对象适用

  • ClassPathXmlApplicationContext 可以加载类路径下的配置文件,要求配置文件在类路径下
  • FileSystemXmlApplicationContext 可以加载任意路径下的配置文件(要有访问权限)
  • AnnotationConfigApplicationContext 读取注解创建容器

ApplicationContest什么时候创建对象

  • 当加载配置文件的时候就创建了对象
阅读更多