zoukankan      html  css  js  c++  java
  • Spring知识点

    IOC(控制反转):即创建调用者的实例不再由调用者完成,而是由spring容器完成,并注入给调用者。举例 A B 两个类 A类里面要用到B的对象 以前的做法都是直接new出来的 ,使用spring后直接由spring中依赖注入。

    IOC实现方式有两种 DL(依赖查找) DI(依赖注入)

    AOP(面向切面编程):是一种编程思想,应用开发场景(日志和事务管理)。

    ApplicationContext 是在加载spring配置文件的时候就创建好对象,可以在类中加无参构造器中进行验证。BeanFactory 并不会在容器初始化时创建,而是在真正调用的时候才会创建(懒加载)。

    动态工厂bean的实现在applicationContext中注入bean  写法是:<bean id=" " factory-bean=" " factory-method=" ">

    静态工厂bean的实现在applicationContext中注入bean  写法是:<bean id=" " class=" " factory-method=" ">

    bean后处理器是在容器初始化前后完成的。spel注入 例: value = #{mySchool.pname} 需要提供get方法。value = #{T(java.lang.Math).random()*50}

    内部bean注入 去掉id属性   不能通过getBean获取到。bean可以抽象出来 通过parent =“”。父类bean 增加abstract = “TRUE” 防止被getBean获取 。

    异类抽象Bean 不需要class属性 添加abstract = “true” 这样就不会去找对应的类。

    为spring配置多个文件 可以在路径那里加 applicationContext-*.xml  或者定义多个 放入数组中。

    基于DI的注解 @component("mySchool") @Autowired 域属性上加  通过byType方式注入  @Qualifier("mySchool") 通过ByName注入。 @Resource  jdk6以上 的注解byType 。在spring的配置文件中加入 <context:component-scan base-package = "com.xxx.xxx"/> 遇到后缀是package 路径都是. 遇到后缀都是location 路径是/

    JavaBean :@Configuration//表示当前类作为spring容器使用 @Bean(“xxx”)

    AOP------------------------------------

     1 //代理
     2 package com.pff;
     3 import java.lang.reflect.InvocationHandler;
     4 import java.lang.reflect.Method;
     5 import java.lang.reflect.Proxy;
     6 
     7 public class DoProxy {
     8     public static void main(String[] args) {
     9         Test();
    10     }
    11     public static void Test() {
    12         IsomeService someService = new SomeServiceImpl();
    13         IsomeService isomeService = (IsomeService) Proxy.newProxyInstance(someService.getClass().getClassLoader(),
    14                 someService.getClass().getInterfaces(), new InvocationHandler() {
    15 
    16                     @Override
    17                     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    18                         SystemMethods.doTx();
    19                         Object result = method.invoke(someService, args);
    20                         SystemMethods.doLog();
    21                         return result;
    22                     }
    23                 });
    24         isomeService.doFirst();
    25         isomeService.doSecond();
    26     }
    27 }
    28 //接口
    29 package com.pff;
    30 
    31 public interface IsomeService {
    32     void doFirst();
    33     void doSecond();
    34 }
    35 //实现类
    36 package com.pff;
    37 
    38 public class SomeServiceImpl implements IsomeService {
    39 
    40     @Override
    41     public void doFirst() {
    42         System.out.println("执行DoFirst方法");
    43     }
    44 
    45     @Override
    46     public void doSecond() {
    47         System.out.println("执行DoSecond方法");
    48     }
    49 
    50 }
    51 //织入方法
    52 package com.pff;
    53 
    54 public class SomeServiceImpl implements IsomeService {
    55 
    56     @Override
    57     public void doFirst() {
    58         System.out.println("执行DoFirst方法");
    59     }
    60 
    61     @Override
    62     public void doSecond() {
    63         System.out.println("执行DoSecond方法");
    64     }
    65 
    66 }
    applicationContext中 有一个ProxyFactoryBean 注册动态代理
    AOP 前置通知方法要实现MethodBeforeAdvise,后置通知方法要实现AfterReturningAdvice,环绕通知要实现MethodInterceptor,异常通知实现ThrowsAdvise

    <!-- 注册自动代理生成器 -->地洞代理生成器
    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

    <!-- 注册自动代理生成器 --> BeanName代理生成
    <!-- 1)可以选择要增强的目标对象 -->
    <!-- 2)切面可以是顾问,也可以是通知 -->
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <property name="beanNames" value="someService"/>
    <property name="interceptorNames" value="myAdvice"/>
    </bean>

    <!-- 注册Jdbc属性文件 -->
    <!--
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:jdbc.properties"/>
    </bean>
    -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- 注册数据源:C3P0数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>
    </bean>

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3366/test
    jdbc.user=root
    jdbc.password=123

    //可以类似的抽方法
    1
    public class StudentRowMapper implements RowMapper<Student> { 2 3 // rs:不是select查询的所有结果集,而是这个结果集中当前遍历的这一行记录 4 @Override 5 public Student mapRow(ResultSet rs, int rowNum) throws SQLException { 6 Student student = new Student(); 7 student.setId(rs.getInt("id")); 8 student.setName(rs.getString("name")); 9 student.setAge(rs.getInt("age")); 10 return student; 11 } 12 13 }
  • 相关阅读:
    js封装一个哈希表
    js封装一个双链表
    js封装一个单链表
    js封装一个栈
    js封装一个优先级队列
    js封装一个队列
    微信小程序开发中自定义自适应头部导航栏
    Git的基本使用
    6位半数字万用表解释
    内存相关概念详解
  • 原文地址:https://www.cnblogs.com/wings-ff/p/9230832.html
Copyright © 2011-2022 走看看