• 第1章 Spring之旅



    1、Spring的两个核心:DI依赖注入,AOP面向切面编程。
    2、DI,对象之间的依赖关系由负责协调对象之间依赖的第三方组件管理(而不是由对象自己维护)。
    3、创建应用组件协作的行为称为“装配”Spring有多中装配bean的方法:XML是比较常见的一种:
    一个简单的Spring配置文件:
        <bean id = "a" class = "com.xxx.yyy.AClass(全类名)">
         <constructor-arg ref = "b" />
      </bean>
      <bean id = "b" class = "com.xxx.yyy.BClass(全类名)">
         <constructor-arg value = "#{T{System}.out}" />
      </bean>
        a 和 b 被称作为bean。a在构造时传入一个b作为参数,b在构造的时候使用Spring表达式语言将System.out传入到了构造器中。
    也可以通过基于java的配置进行装配。
    5、Spring通过依赖注入的方法将对象之间的耦合降低。(对象不必了解传入的是什么,Spring会对bean进行装配)
    6、Spring使用“应用上下文”(Application Context)实现对Bean的创建和装配。
    (Application Context有很多实现方式,他们的区别在于如何加载配置。)
    7、ClassPathXmlApplicationContext:该类可以加载位于应用程序路径下的一个或者多个XML配置文件。
        ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("MEAT-INF/spring/xxx.xml");
        Aaa aaa = appContext.getBean(Aaa.class);   //Aaa类的装配内容在.xml配置文件中,这里不要知道具体。
    8、AOP可以将分布在应用中的各种功能分离出来行程可重用的组件。
    例如:系统由很多功能模块,每一个功能模块除了要实现核心业务之外,还要实现日志、安全、事务管理等服务。
    这些服务称为“横切关注点”,因为他们跨越了多个功能模块。
    AOP可以使这些关注点模块化,并且使用声明的方式应用到各个模块中。(使用这些服务将核心模块包住)
    9、理解AOP:
    例子:骑士的事迹是由诗人吟唱推广的,诗人有吟唱的方法。
    非AOP解决:
    在骑士对象内部创建一个诗人对象,调用诗人的吟唱方法。
    AOP解决:
    将诗人的吟唱方法抽象成一个切面,使用声明的方法让诗人吟唱,骑士本身不直接访问该方法。
    10、在Spring配置文件中声明切面:
        <beans>
            <bean id = "骑士ID" class = "全类名">
                <constructor-arg ref = "冒险">
            </bean>
            <bean id = "诗人ID" class = "全类名">          //声明诗人bean
                <constructor-arg value = "吟唱的输出流">
            </bean>
            <aop:config>
                <aop:aspect ref = "诗人ID">
                    <aop:pointcut id = "吟唱ID" expression = "* *.在冒险时吟唱" />      //定义切点(后面的expression不是很懂)
                    <aop:before pointcut-ref = "吟唱ID" method = "冒险开始是吟唱" />   //声明前置通知
                    <aop:after pointcut-ref = "吟唱ID" method = "冒险结束后吟唱">      //声明后置通知
                </aop:aspect>
            </aop:config>
        </beans>
        讲解:
    1:使用“诗人ID”将诗人bean声明为一个切面。
    2:前置通知会在切点执行之前调用,后置通知类似。这两个通知都引入了“吟唱ID”作为切入点。
    11、在日常编码过程中经常会编写一些模板性的代码(例如JDBC编码过程,大部分代码是模板,关键代码就那么几句)
    Spring旨在通过模板封装来消除模板式代码,Spring通过jdbcTemplate是执行jdbc简单化。
    代码如下:
        public Employee getEmployeeById(Long id){
                return jdbcTemplate.queryForObject(
                    "select id , firstName ,lastName , salary from employee where id = ?",          //sql语句。
                    new RowMapper<Employee>(){      //将结果封装到对象中。
                        public Employee mapRow(ResultSet rs ,int rowNum) throws SQLException{
                            Employee employee = new Employee();
                            employee.setId(rs.getLong("id"));
                            employee.setFirstName(rs.getString("firstName"));
                            employee.setFirstName(rs.getString("lastName"));
                            employee.setFirstName(rs.getBigDecimal("salary"));
                            return employee;
                        }
                    },
                    id      //查询条件Id
                );
            }
            //jdbcTemplate的queryForObject()需要一个sql查询语句,一个用于封装数据的RowMapper对象,需要一个或者多个查询条件。
    12、基于Spring的应用中,程序对象都存在于Spring容器中。对象的声明周期都又容器管理。
    13、容器是Spring框架的核心。容器不止一个,但可以分为两类:
    1:bean工厂:org.springframework.beans.factory.eanFactory接口定义。是最简单的容器,提供基本的DI支持。(有点低级)
    2:应用上下文:org.springframework.context.applicationContext接口定义。提供了应该框架级别的服务。
    14、Spring中自带了多种类型的应用上下文。下面是最常用的:
    AnnotationConfigApplicationContext:
    从一个或者多个基于java的配置类中加载Spring应用上下文。
    AnnotationConfigWebApplicationContext:
    从一个或者多个基于java的配置类中加载Spring Web应用上下文。
    ClassPathXmlApplicationContext:
    从类路径下加载一个或者多一个XML配置文件上下文,将该文件作为资源。
    ApplicationContext context = new ClassPathXmlApplicationContext("config.xml"); //类路径中找
    FileSystemXmlApplicationContext:
    从文件系统的一个或者多个Xml配置文件加载上下文。
    ApplicationContext context = new FileSystemXmlApplicationContext("c:/config.xml"); //文件系统中找
    XmlWebApplicationContext:
    从Web应用下一个或者多个Xml文件中加载上下文。
    一旦应用上下文就绪后,我们就可以调用上下文的getBean()方法从容器中获取bean。
    15、bean的生命周期:
    1:Spring对bean进行实例化。
    2:Spring将bean的应用注入到对应的属性中。
    3:如果实现了某个特定的接口则实现特定的操作。
    接口 操作
    BeanFactoryAware 调用setBeanFactory()方法
    ApplicationContextAware 调用setApplicationContext()方法
    InitializingBean 调用afterPropertiesSet()方法
    BeanPostProcessor 调用postProcessAfterInitialization()方法
    4、到现在bean已经就绪,将一直驻留在应用上下文中,随时可以使用。直到应用上下文被销毁。
    5、如果实现了DisposableBean接口,Spring调用它的destroy()方法,
    如果bean使用destroy-method方法声明了销毁方法,则执行之。
    16、Spring是个庞然的生态圈。他除了Spring框架外,还扩展到个各个领域。
    下载Spring发布版后去lib目录下存在着大量的jar文件,在Spring4.0中包含了20个不同的模块,每一个模块下都有三个jar文件
    1:二进制库
    2:源码的jar文件
    3:javaDoc的jar文件
    (这些模块可以选择性的使用)




  • 相关阅读:
    国产html编辑器
    豆瓣90mhz电台还行
    购物搜索
    linode vps 优化集锦
    这个系统,我看行,
    代理网站
    合理设置域名TTL值给网站加速
    dns切换到dnspod
    elixir usage
    JSSH介绍
  • 原文地址:https://www.cnblogs.com/Xmingzi/p/8808007.html
Copyright © 2020-2023  润新知