博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring基础知识总结
阅读量:6202 次
发布时间:2019-06-21

本文共 4938 字,大约阅读时间需要 16 分钟。

IOC,DI

xml配置

beans根标签

bean

  1. name
  2. class
  3. factory-method
  4. factory-bean
  5. init-method
  6. destroy-method
  7. scope
    • singleton
    • prototype
    • request
    • session
    • globalSession

属性注入

property set注入

  1. name
  2. value
  3. ref

constructor-arg 构造方法注入

  1. name
  2. value
  3. ref

p命名空间注入

xmlns:p=""

复制代码

SpEl注入

复制代码

复杂类型

复杂类型放入property中:

  1. 数组,list
1
2
3
复制代码
  1. map
    
复制代码
  1. property
root
123
复制代码

多配置

  1. 加载多个
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");复制代码
  1. 引入另一个
复制代码

注解

  • @Component
  • @Controller :WEB 层
  • @Service :业务层
  • @Repository :持久层
  1. @Value :用于注入普通类型.
  2. @Autowired :自动装配:
  3. @Qualifier:强制使用名称注入.
  4. @Resource 相当于:@Autowired 和@Qualifier 一起使用
  5. @Scope
  6. @PostConstruct
  7. @PreDestroy

AOP

代理机制:

  • Spring 的 AOP 的底层用到两种代理机制:
    • JDK 的动态代理 :针对实现了接口的类产生代理.
    • Cglib 的动态代理 :针对没有实现接口的类产生代理. 应用的是底层的字节码增强的技术 生成当前类的子类对象.

JDK 动态代理

public class MyJDKProxy implements InvocationHandler {    private UserDao userDao;    public MyJDKProxy(UserDao userDao) {        this.userDao = userDao;    }    // 编写工具方法:生成代理:    public UserDao createProxy(){        UserDao userDaoProxy = (UserDao)         Proxy.newProxyInstance(userDao.getClass().getClassLoader(),        userDao.getClass().getInterfaces(), this);        return userDaoProxy;    }        @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        if("save".equals(method.getName())){            System.out.println("权限校验================");        }        return method.invoke(userDao, args);    }}复制代码

Cglib 动态代理

public class MyCglibProxy implements MethodInterceptor{    private CustomerDao customerDao;    public MyCglibProxy(CustomerDao customerDao){        this.customerDao = customerDao;    }    // 生成代理的方法:    public CustomerDao createProxy(){        // 创建 Cglib 的核心类:        Enhancer enhancer = new Enhancer();        // 设置父类:        enhancer.setSuperclass(CustomerDao.class);        // 设置回调:        enhancer.setCallback(this);        // 生成代理:        CustomerDao customerDaoProxy = (CustomerDao) enhancer.create();        return customerDaoProxy;    }    @Override    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {        if("delete".equals(method.getName())){            Object obj = methodProxy.invokeSuper(proxy, args);            System.out.println("日志记录================");            return obj;        }        return methodProxy.invokeSuper(proxy, args);    }}复制代码
  1. Joinpoint(连接点):
  2. Pointcut(切入点):
  3. Advice(通知/增强):
  4. Target(目标对象):
  5. Weaving(织入):
  6. Proxy(代理):
  7. Aspect(切面):

AOP约束

复制代码
复制代码

报错不用怕:

org.aspectj
aspectjweaver
1.6.11
cglib
cglib
2.2.2
复制代码

aop注解

@Aspectpublic class MyAspectAnno {        @Before("MyAspectAnno.pointcut1()")    public void before(){        System.out.println("前置通知===========");    }        @AfterReturning("MyAspectAnno.pointcut2()")    public void afterReturning(){        System.out.println("后置通知===========");    }        @Around("MyAspectAnno.pointcut3()")    public Object around(ProceedingJoinPoint joinPoint) throws Throwable{        System.out.println("环绕前通知==========");        Object obj = joinPoint.proceed();        System.out.println("环绕后通知==========");        return obj;    }        @AfterThrowing("MyAspectAnno.pointcut4()")    public void afterThrowing(){        System.out.println("异常抛出通知========");    }        @After("MyAspectAnno.pointcut4()")    public void after(){        System.out.println("最终通知==========");    }        @Pointcut("execution(* 包.类.save(..))")    private void pointcut1(){}    @Pointcut("execution(* 包.类.update(..))")    private void pointcut2(){}    @Pointcut("execution(* 包.类.delete(..))")    private void pointcut3(){}    @Pointcut("execution(* 包.类.find(..))")    private void pointcut4(){}}复制代码

spring JDBC

bean配置连接

复制代码

外部属性配置

jdbc.driverClass=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql:///spring_day02jdbc.username=rootjdbc.password=123复制代码

外部属性文件引入

复制代码

配置事务管理器

复制代码

配置事务的通知

复制代码

配置aop

复制代码

注解的方式开发

复制代码

@Transactional 注解配置

事务传播行为

PROPAGION_XXX :事务的传播行为

  • 保证同一个事务中
    • PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认)
    • PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
    • PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常
  • 保证没有在同一个事务中
    • PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务
    • PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
    • PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
    • PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

转载地址:http://tkaca.baihongyu.com/

你可能感兴趣的文章
springboot+thymeleaf模板的一个问题,搞了一天才搞定。
查看>>
about rubygems install
查看>>
Windows Phone7监测网络接口及状态变化
查看>>
Zabbix 3.4.3通过钉钉机器人报警
查看>>
CentOS 7使用rsync实现数据备份
查看>>
关于时间的shell问题,需要调用shell为具有年月日的,比如20110919
查看>>
Java:一个分数类的简单设计
查看>>
在线编辑器KindEditor
查看>>
mysql的group_concat函数
查看>>
MDSF:特定领域建模 DSM(Domain Specific)介绍
查看>>
MacOSX和Windows 8的完美融合
查看>>
关于通过聚集索引以及堆来对比数据表组织结构-SQLServer最优实践 的一点看法...
查看>>
《网管员世界》记者走基层采访实录
查看>>
模拟Linux客户端远程登陆Linux服务器、Windows server2003服务器、交换路由设备实验...
查看>>
windows 2008 RODC
查看>>
使用组策略映射网络驱动器
查看>>
个人管理 - 做个注重贡献的高效能技术人员
查看>>
Mysql闹鬼!不要密码也能登陆
查看>>
Windows Server 2012平台配置Exchange Server 2013高可用参考v1.0
查看>>
浅谈HTTP中Get与Post的区别
查看>>