Spring知识点速记

  1. ioC容器在管理什么? (Service与Dao)
    2.如何将被管理的对象告知IoC容器? 配置文件标签bean 通过class指定实现类的全路径
    3.如何获取IOC容器 applicationContext.xml
    new ClassPathXmlApplicationContext

  2. bean基础配置需要指定哪些属性?
    答: id、class
    2… bean别名如何配置?
    答:使用name属性配置
    3.bean 作用范围都有哪些?
    答: singleton、prototype、request、
    session、 application、 websocket

实例化bean的三种方式

1.提供可访问的构造方法
2.实例工厂 获取工厂实例 获取实例方法
3.FactoryBean

依赖注入方式
像一个类中传递数据的方法
1.普通方法 set方法 setter注入
(1)简单类型 基本数据类型+String
(2)引用类型
2.构造方法 简单类型+引用类型
name type index

依赖自动装配(DI 注入)
按 类型 名称 构造方法
<bean id class … autowrite=“byType”>

Bean的生命周期
初始化容器
1.创建对象
2.执行构造方法
3.执行属性注入
4.执行bran初始化方法 init

使用bean
执行业务操作

关闭销毁容器
执行 bean销毁方法 destory

核心容器总结
1.聊一聊BeanFactory 与ApplicationContext?
获取容器用 继承关系A是B的扩展
区别:Bean的延迟加载
2.配置Bean会用到哪些属性?

id class name scope init-method destory-method autowrite

3.Bean的注入有哪些方式?能注入哪些类型的数据?
setter 注入 简单类型 引用类型 property
构造器注入 简单类型 引用类型 constructor-arg

4.面试题: BeanFactory和 FactoryBean有什么区别?
BeanFactory 工厂 创建 使用 销毁 Bean
FactoryBean Bean 一种实例化方式 可以用于获取Bean

注解开发

1.如何使用注解定义bean?
类前加入注解
@Component
@Controller 表示层
@service 服务层
@Repository 数据层

2.如何使用纯注解开发?

@Configuration 配置类
@ComponetScan 扫描注解
@PropertySource(“classpath:jdbc.properties”)
获取容器

new AnnocationConfigApplicationContext()

Bean管理

1.使用哪个注解指定bean作用范围?
@scope
2. bean生命周期可以使用哪些注解?
@PostConstruct
@PreDestroy

依赖注入

自动装配注解
@Autowired 开启自动装配模式
@Qulifier(“bean名称”)指定要装配的bean名称
@Valuer(${name}) 实现简单类型注入 注意这种形式需要再配置中加载属性文件 @PropertySource()

第三方Bean

1.管理第三方 Bean 交给Spring管理 @Bean
2.@Import({jdbcConfig.Class})将独立的配置类加入核心配置

AOP代码增强

思路

  1. 导入坐标(pom.xml)
  2. 制作连接点方法(原始操作,dao接口与实现类)
  3. 制作共性功能(通知类与通知)
    @Aspect 通知类
    @component 被扫描
  4. 定义切入点
    @Pointcut(“executiom(增强的方法)”) 对谁做增强
    public void pt()
  5. 绑定切入点与通知关系(切面 :描述通知与切入点的对应关系
    什么时候增强 增强那些内容
    @Before(“pt()”)
    pubilc void before(){
    sout(shkghjk)
    }

AOP切入点表达式

切入点:要进行增强的方法
切入点表达式:要进行增强的方法的描述方式
1.格式:动作关键字(访问修饰符﹑返回值﹑包名.类/接口名.方法名(参数)异常名)
动作关键字 excution()
2.批量 execution (public * com.itheima..UserService.find(*))

AOP通知类型

1.前置通知
@Before(" “)
public void before(){}
2.后置通知
@After(”")
public void after(){}
3.环绕通知(重点)
@Around ( "pt () ")
public Objectaround (ProceedingJoinPoint joinPoint) throws Throwable {
system.out.println ( “around before” ) ;
//执行被代理的方法
Object proceed = joinPoint.proceed ( ) ;
system.out.println ( “around after” );
return proceed;
}

@Around("pt()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {

        //获取签签名
        Signature signature = joinPoint.getSignature();

        //获取接口名称
        String type = signature.getDeclaringTypeName();

        //获取方法名称
        String name = signature.getName();
        Integer proceed = null;
        //获取开始时间
        long start = System.currentTimeMillis();
        //万次执行
        for(int i=0;i<10000;i++){
            //执行被代理的方法
            proceed = (Integer) joinPoint.proceed();
        }
        //获取结束时间
        long end = System.currentTimeMillis();

        long time = end - start;

        System.out.println("方法万次执行时间为:"+type+"."+name+"===>"+time+"ms");

        return proceed;
    }

AOP通知获取数据

1.获取切入点方法的参数
JoinPoint jointPoint
ProceedJointPoint jointPoint 适用于环绕通知

jointPoint.getArgs[]

2.获取方法的返回值
环绕通知 proceed = joinPoint.proceed();
返回后通知 注解中指定哪个参数作为返回值 通知中加入一个参数作为返回值
@AfterReturning(value = “pt()”,returning = “num”)
public void afterReturning(Integer num) {}

3.获取切入点方法运行异常信息
1.环绕通知

try {
            proceed = joinPoint.proceed();
        } catch (Throwable throwable) {
            System.out.println("save 异常");
        }

2.抛出异常通知

@AfterThrowing(value="pt()",throwing="t"public void afterThrowing(Throwable t) {}

Spring事务

事务作用:在数据层保障一系列的数据库操作同成功同失败
Spring事务:在数据层或业务层保证数据库操作 事务管理接口+事务实现类 接口中有两个方法 提交 或者回滚

public interface PlatformTransactionManager{
void commit(Transactionstatus status) throws TransactionException;
void rollback(Transactionstatus status) throws TransactionException;}

public class DataSourceTransactionManager 
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值