Spring学习笔记

一、IOC
1.Spring 开源  控制反转(IOC、DI ) 面向切面
2.DI 依赖注入 在运行期动态的将对象注入到应用中。
3.优点:①.降低耦合度,实现各层解耦。
             ②.提供众多服务,如事务管理服务、消息服务。
             ③.容器提供单例模式支持。
             ④.AOP 可实现权限拦截、运行期监控等。
             ⑤.众多辅助类。JdbcTemplate、HibernateTemplate
             ⑥.spring提供主流应用框架的集成支持。
4.获取配置文件ApplicationContext和ClassPathXmlApplicactionContext
5.对已有类抽取接口
6.scope ①.singleton 默认单例
             ②.prototype 原型
             ③.request
             ④.session
             ⑤.global session
7.init-method   destroy-method
8.set方法注入
     <bean id="personService" class="org.likui.service.impl.PersonServiceBean">
        <property name="personDao" ref="personDao"></property>
    </bean>
    //name是类中属性的名称,ref是配置文件中bean的id
    ①.循环所有的bean
    ②.获取bean的属性描述
    ③.循环bean中的所有的property
    ④.循环所有的属性描述
    ⑤.判断bean的属性描述的名称是否和property的name相等
    ⑥.如果相等,在所有的bean中获取名称与rel相等的bean,注入到当前bean中。
9.<property name="personDao" ref="personDao"></property>
10.<property name="personDao">
        <bean class="org.likui.dao.impl.PersonDaoBean" />
    </property>
11.注入基本类型的数据时使用commons-beanutils 中的 ConvertUtils.convert(String value, class clazz);将value转成clazz类型
12.注入集合类型 set list map properties
13.使用构造器注入
         <constructor-arg index="0" type="org.likui.dao.PersonDao" ref="personDao"></constructor-arg>
        <constructor-arg index="1" value="李魁"></constructor-arg>
14.使用注解进行注入。上面都是基于xml注入。
        @Autowired  默认按类型进行装配 spring提供 通过 @Qualifier("personDaoXxx")可改变默认行为,改变为按名称注入
        @Resource 默认按名称进行装配,如果找不到与名称匹配的bean才会按类型进行装配 java提供,推荐使用,与框架耦合度低。
15.手工装配,自动装配。推荐使用手工装配。
16.自动装载 autowire="byType、byName、constructor(与构造器类型匹配)、autodetect(在byType和constructor中选择一个)"
17.自动扫描的方式将组建纳入spring容器中管理  @Component(不好归类的)、@Service、@Controller、@Repository(Dao层) 
18.@Scope 类的作用域 @PostConstruct 类的初始化方法   @PreDestroy 类的销毁方法

-------------------------------------------------------------------------------------------------------------------------------------------------
问题:1.自动装载的顺序。2.自动装载是否需要注入
-------------------------------------------------------------------------------------------------------------------------------------------------
        
二、AOP
    简单权限控制
        1.拦截所有业务方法
        2.判断用户是否有权限,有权限就允许执行业务方法,没有权限不允许执行业务方法.(是否有权限是根据user是否为null作为判断)
    代理对象 Proxy代理类(目标类必须实现接口)
        1.静态代理(用得比较少)
        2.动态代理
    横切性关注点

    通知类型
        1.前置通知
        2.后置通知
        3.例外通知
        4.最终通知
        5.环绕通知
 
----------------------------------------
1.注解方式配置AOP 
        @Aspect 声明一个类是一个切面
        @Pointcut 拦截方法
              --  @Pointcut("execution(* org.likui.service..*.*(..))")
                  |-- execution 执行
                  |-- * 返回值类型  java.lang.String |  !void
                  |-- org.likui.service 包
                  |-- .. 所有子包
                  |-- * 所有类
                  |-- * 所有方法
                  |-- .. 任意参数        (Java.lang.String , .. )
        //获取参数
         @Before("anyMethod() && args(name)")
        public void doAccessCheck(String name){
            System.out.println("前置通知:" + name);
        }
        //获取返回值
        @AfterReturning(pointcut = "anyMethod()",returning="result")
        public void doAfterReturning(String result){
            System.out.println("后置通知:" + result);
        }
        //获取异常        
        @AfterThrowing(pointcut = "anyMethod()",throwing="e")
        public void doAfterThrowing(Exception e){
            System.out.println("例外通知");
            e.printStackTrace();
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值