aop面向切面操作 JDBCtemplate概述

AOP概念

AOP(概念)
1、什么是AOP
(1)面向切面编程(方面),利用AOP可以对业务逻辑的各个部分进行隔离,从而使得
业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率
(2)通俗描述:不通过修改源代码方式,在主千功能里面添加新功能

方法增强

用动态代理实现方法增强例子:

@Test
public void demo3(){
    
    
 final ICat cat = new Cat();//原对象
 ICat catProxy = (ICat) Proxy.newProxyInstance(cat.getClass().getClassLoader(), cat.getClass().getInterfaces(), new InvocationHandler() {
    
    
   
  public Object invoke(Object proxy, Method method, Object[] objs)
    throws Throwable {
    
    
   //增强run方法
   if(method.getName().equals("run")){
    
    
    method.invoke(cat,objs);//调用原对象的方法,保留原方法的功能
    //新增功能
    System.out.println("抓住第三只老鼠");
   }
   return null;
  }
 });
 catProxy.run();
}

execution的格式:
4、切入点表达式
I
(1)切入点表达式作用:知道对哪个类里面的哪个方法进行增强
(2)语法结构:

execution([限修饰符][返回类型][类全路径][方法名称]/(参数列表])

举例1:对com. atquigu.dao. BookDao类里面的add进行增强
execution( com, atquiqu. dao, BookDao, add(…).
举例2:对com. atquigu.dao. BookDao类里面的所有的方法进行增强
execution(
com. atquiqu. dao. BookDao. *(
对com.dao包下的所有类,所有方法进行增强:

> excution(*com.dao.*./*(..))

springxml配置文件中配置切入点:

<!--创建对象-->
<bean id="book" class ="com.spring5.Book"></bean>
<bean id="bookProxy" class ="com.spring5.BookProxy"></bean>
<!--配置AOP增强-->
<aop:config>

<!--切入点-->
<aop:pointcut id="p"  expression ="execution(* com.spring5. Book. buy (..))"/>
<!--配置切面-->
<aop:aspect ref="bookProxy">
<!--增强作用在具体的方法上-->
<aop:before mehod="before" pointcut-ref="p"/>
</aop:aspect>
 </aop: config>
</beans>

基于AspectJ注解的方式进行AOP操作

1.创建类,在类里面定义方法

public class User{
    
    
public void add(){
    
    
System.out.printIn("add..");
}}

2.创建增强类
(1)在增强类里面创建方法,让不同方法代表不同通知类型

//增强的类
public class UserProxy{
    
    
//前置通知
public void before(){
    
    
}
}


3.进行通知的配置
(1)在spring配置文件中开启注解扫描
(2)开启ASpecJ生成代理对象
在这里插入图片描述

4.有多个增强类对同一个方法增强,可以设置增强类优先级:
在增强类上面添加注解@Order(数字),数字类型越小优先级越高

@Component
@Aspect
@Order(1)
public class PerProxy{
    
    
}

完全注解开发(不再需要XML配置文件)

加上配置类,在配置类上面加上注解:

@Configuration
 @ComponentScan(basePackages={
    
    "com.spring5"})
@EnableAspectJAutoProxy
public class Config{
    
    }

JDBCtemplate概述

准备工作:

(1)导入相关jar包
(2)在spring配置文件中配置数据库连接池
(3)配置JDBCtemplate对象,注入DataSource

(2)在spring配置文件配置数据库连接池
<!--数据库连接池-->
 <bean id="" class= "com.alibaba.druid.pool. DruidDatasaurce"
 destroy method="close" >;
<property name="url" value="jdbe: mysql: ///user_db"/>
<property name="userame" value="root"/>
 <property nane="password" value="root"/>
 <property nane driverClassName value="com.mysql.jdbc. Driver"/>
 </bean><!--(3)配置JdbeTemplate对象,注入 DataSource
-JdbeTesplate对象-->
 <bean id="jdbcTemplate"class="org.springframework.jdbc. core.JdbcTemplate">
<!--注入 datasource-->
<property name="dataSource" ref ="dataSource"></property>.
 </bean>.

(4)创建service类,创建dao类,在dao注入jdbcTemplate对象
配置文件中:开启组件扫描

<context:component-scan base-package="com.spring5"></context:component-scan>

java:
service:

public class BookService{
    
    
@Autowired//注入DAO
private BookDao bookDao;}

dao:

public interface BookDao{
    
    
}

BookDao的实现类:

@Repository
public class BookDaoImol implements BookDao{
    
    
//注入JdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
}

之后:
1。创建enetiy实体类
2.编写service和dao
(1)在Dao进行数据库添加操作
(2)调用JdbcTemplate的update方法【有两个参数,第一个是sql语句,第二个是可变参数】
在上述代码中做修改:

public class Book{
    
    
private String id;
private String name;
private String status;
//省略了getter setter
}
public interface BookDao{
    
    
public void add(Boook book);
}

service:

public class BookService{
    
    
public void addBook(Book book){
    
    
bookDao.add(book);}
}
@Repository
public class BookDaoImol implements BookDao{
    
    
//注入JdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void add(Book book){
    
    
String sql = "insert into xx value(?,?,?)";
int update = jdbcTemplate.update(sql,book.getId,book.getName,book.getStatus);
}

测试类:

@Test
 public void test JdbeTemplate(){
    
    
 ApplicationContext context=
 new ClassPathXmlApplicationContext("beanl. xml");
 BookService bookService= context. getBean("bookService", BookService.class);
 Book book= new Book();
 book.setId("1");
 book.setName("java");
 book.setUstatus("a");
 bookService.addBook(book); 
 }

猜你喜欢

转载自blog.csdn.net/qq_41358574/article/details/113926177