1、Spring框架的核心是提供一个容器(BeanFactory 或 ApplicationContext),提供以下功能:

  1)创建和销毁组件对象,类似“工厂类”

  2)采用不同的模式创建对象

  3)IOC

  4)AOP

2、Bean组件配置

  <bean id="标识符" class="完整类路径" scope="type" init-method="方法名" destroy-method="方法名"/>

    type:1)singleton:单例模式,在容器实例化时创建

       2)prototype:在调用getBean()时创建

    指定销毁方法是在容器关闭时触发,只适用于singleton

  使用时:

    ApplicationContext ac = new ClassPathXmlApplicationContext("path/of/applicationContext.xml");

    Bean bean = (Bean)ac.getBean("beanid");

3、Spring IOC(Inverse of Controller)

  将对象关系的指定,对象创建,初始化和销毁等逻辑交给Spring负责

4、DI(Dependency Injection)

  Spring采用DI技术实现IOC控制思想

  注入的两种方法:

    1)setter方式注入,使用set方法注入,在<bean>中采用如下描述:

      <property name="属性名" ref="注入Bean对象的ID" />

    2)构造方法注入,提供构造方法注入,少用,<bean>中配置:

      <constructor-arg index ="参数索引,从0开始计数" ref="注入Bean对象的ID" />

  Spring中各种类型的数据注入

    1)Bean对象注入

      <property name="属性名" ref="注入Bean对象的ID" />

    2)基本数据的注入

      <property name="属性名" value="值" />

    3)集合的注入

      (1)List Set  

        <property name="属性名" >

          <list>

            <value>value0</value>

            <value>value1</value>

          </list>

        </property>

      <!-- 普通值用<value>标签,对象用<bean>标签:<ref bean="beanid" />,如果是集合,<list> 标签改成 <set> -->

      (2)Map     

        <property name="属性名" >

          <map>

            <entry key="键0" value="值0" />

            <entry key="键1" value="值1" />

          </map>

        </property>

      <!-- 普通值用<value>标签,对象用: <entry key="键0" value-ref="beanid" />-->

      (3)properties

        <property name="属性名" >

          <props>

            <prop key="键0"> value<prop/>

            <prop key="键1"> value<prop/>

          </props>

        </property>

5、AOP(Aspect Orented Programming)

  1)aspect:插入的通用处理功能组件

  2)joinpoint:连接点,aspect插入点

  3)pointcut:joinpoint组成pointcut

  4)advice:通知,aspect 和 joinpoint间的发生次序

  5)target:目标,利用切入点指定的组件和方法

  6)autoproxy:AOP利用动态代理实现AOP

  例子:

  1. <aop:config>
  2. <aop:aspect id="TestAspect" ref="aspectBean">
  3. <!--配置com.spring.service包下所有类或接口的所有方法-->
  4. <aop:pointcut id="businessService" expression="execution(* com.spring.service.*.*(..))" />
  5. <aop:before pointcut-ref="businessService" method="doBefore"/>
  6. <aop:after pointcut-ref="businessService" method="doAfter"/>
  7. <aop:around pointcut-ref="businessService" method="doAround"/>
  8. <aop:after-throwing pointcut-ref="businessService" method="doThrowing" throwing="ex"/>
  9. </aop:aspect>
  10. </aop:config>
  11.  
  12. <bean id="aspectBean" class="com.spring.aop.TestAspect" />
  13. <bean id="aService" class="com.spring.service.AServiceImpl"></bean>
  14. <bean id="bService" class="com.spring.service.BServiceImpl"></bean>

  切入点定义:

    1)方法限定表达式:execution(修饰符(可无) 返回类型 方法名(参数列表)  异常(可无))

    2)类型限定表达式:with(类型)

    3)Bean名称限定:Bean(id)

    4)args参数限定:args(类型)

6、log4j

  log4j主要有以下3部分构成

    1)日志器(logger)

    2)输出器(appender)

    3)布局器(格式器,layout)

  如:

  1. #1. 设置输出级别
  2. log4j.rootLogger=info,myconsole,myfile,dateFile,MAIL
  3.  
  4. #2. 设置具体的配置信息
  5. log4j.appender.myconsole=org.apache.log4j.ConsoleAppender
  6. log4j.appender.myconsole.target=System.out
  7. log4j.appender.myconsole.layout=org.apache.log4j.PatternLayout
  8. log4j.appender.myconsole.layout.conversionPattern=%d{yyyy-MM-dd HH\:mm\:ss.SSS} %l %m %n
  9.  
  10. #2. 设置具体的配置信息(文件中)
  11. log4j.appender.myfile=org.apache.log4j.FileAppender
  12. log4j.appender.myfile.file=d:/log4j.txt
  13. log4j.appender.myfile.layout=org.apache.log4j.PatternLayout
  14. log4j.appender.myfile.layout.conversionPattern=%d{yyyy-MM-dd HH\:mm\:ss.SSS} %l %m %n
  15.  
  16. #2. 设置具体的配置信息(文件中,每天一个)
  17. log4j.appender.dateFile=org.apache.log4j.DailyRollingFileAppender
  18. log4j.appender.dateFile.File=d\:/my.html
  19. log4j.appender.dateFile.layout=org.apache.log4j.HTMLLayout
  20. log4j.appender.dateFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
  21.  
  22. #2. 设置具体的配置信息(发送邮件)
  23. log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
  24. #控制当前级别: log4j.appender.MAIL.Threshold=FATAL
  25. log4j.appender.MAIL.bufferSize=100
  26. log4j.appender.MAIL.From=zuxia@qq.com
  27. log4j.appender.MAIL.SMTPHost=127.0.0.1
  28. log4j.appender.MAIL.Subject=Log4J Message
  29. log4j.appender.MAIL.To=zuxia@qq.com
  30. log4j.appender.MAIL.layout=com.zuxia.test.MyLayoutPattern #此类是用户自定义的哦 重写了HTMLLayout类
  31. log4j.appender.MAIL.layout.ConversionPattern=%d - %c -%-4r [%t] %-5p %c %x - %m%n

  在log4j.properties如果配置多种输出方式,其均有效  

  获取logger时:

    Logger logger = Logger.getLogger(??)

    ??在打印日志的时候会显示出来

7、Spring注解配置

  1)组件扫描: 

    @Component:其他组件

    @Controller:Action组件

    @Service:Service组件

    @Repository:Dao组件

  注解只能用在类定义前,方法定义前,成员变量定义前,上述注解只是推荐用法

  2)开启组件扫描方法:

    <context:component-scan base-package="package.path" />

  4)注入注解,注入标记在成员变量定义前使用

    @Resource:默认按类型匹配注入,如有多个符合要求类型,报错,匹配不唯一,使用名称注入方式

      @Resource(name="beanid")

    @Autowired:默认按类型匹配注入,如有多个符合要求类型,则使用名称注入方式

      @Autowired

      @Qualifier("beanid")

  5)AOP注解

    (1)开启AOP注解

      <aop:aspect-autoproxy />

    (2)使用@component将组件扫描到时Spring容器

    (3)使用@Aspect将组件定义为Aspect组件

    (4)定义方法,在方法前使用@Pointcut定义切入点表达式

    (5)在target前使用@Around,@Before,@AfterReterning,@AfterThrowing,@After

  例子

  1. package com.bird.service;
  2.  
  3. import org.aspectj.lang.ProceedingJoinPoint;
  4. import org.aspectj.lang.annotation.After;
  5. import org.aspectj.lang.annotation.AfterReturning;
  6. import org.aspectj.lang.annotation.AfterThrowing;
  7. import org.aspectj.lang.annotation.Around;
  8. import org.aspectj.lang.annotation.Aspect;
  9. import org.aspectj.lang.annotation.Before;
  10. import org.aspectj.lang.annotation.Pointcut;
  11.  
  12. /**
  13. * 切面
  14. * @author Bird
  15. *
  16. */
  17. @Aspect
  18. public class MyInterceptor {
  19. @Pointcut("execution(* com.bird.service.impl.PersonServiceBean.*(..))")
  20. private void anyMethod(){}//定义一个切入点
  21.  
  22. @Before("anyMethod() && args(name)")
  23. public void doAccessCheck(String name){
  24. System.out.println(name);
  25. System.out.println("前置通知");
  26. }
  27.  
  28. @AfterReturning("anyMethod()")
  29. public void doAfter(){
  30. System.out.println("后置通知");
  31. }
  32.  
  33. @After("anyMethod()")
  34. public void after(){
  35. System.out.println("最终通知");
  36. }
  37.  
  38. @AfterThrowing("anyMethod()")
  39. public void doAfterThrow(){
  40. System.out.println("例外通知");
  41. }
  42.  
  43. @Around("anyMethod()")
  44. public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable{
  45. System.out.println("进入环绕通知");
  46. Object object = pjp.proceed();//执行该方法
  47. System.out.println("退出方法");
  48. return object;
  49. }
  50. }

  6)常用注解汇总

  1. @Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean
  2. @Scope注解 作用域
  3. @Lazy(true) 表示延迟初始化
  4. @Service用于标注业务层组件、
  5. @Controller用于标注控制层组件(如struts中的action
  6. @Repository用于标注数据访问组件,即DAO组件。
  7. @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
  8. @Scope用于指定scope作用域的(用在类上)
  9. @PostConstruct用于指定初始化方法(用在方法上)
  10. @PreDestory用于指定销毁方法(用在方法上)
  11. @DependsOn:定义Bean初始化及销毁时的顺序
  12. @Primary:自动装配时当出现多个Bean候选者时,被注解为@PrimaryBean将作为首选者,否则将抛出异常
  13. @Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
  14. @Autowired @Qualifier("personDaoBean") 存在多个实例配合使用
  15. @Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
  16. @PostConstruct 初始化注解
  17. @PreDestroy 摧毁注解 默认 单例 启动就加载
  18. @Async异步方法调用

Spring 笔记总结的更多相关文章

  1. Spring笔记02_注解_IOC

    目录 Spring笔记02 1. Spring整合连接池 1.1 Spring整合C3P0 1.2 Spring整合DBCP 1.3 最终版 2. 基于注解的IOC配置 2.1 导包 2.2 配置文件 ...

  2. Spring笔记01_下载_概述_监听器

    目录 Spring笔记01 1.Spring介绍 1.1 Spring概述 1.2 Spring好处 1.3 Spring结构体系 1.4 在项目中的架构 1.5 程序的耦合和解耦 2. Spring ...

  3. Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven)

    Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven) 本篇和 Spring 没有什么关系,只是学习 Spring,必备一些知识,所以放在这里了. 本篇内容: (1)M ...

  4. Spring笔记:事务管理

    Spring笔记:事务管理 事务管理 Spring事务管理是通过SpringAOP去实现的.默认情况下Spring在执行方法抛出异常后,引发事务回顾,当然你可以用拦截器或者配置去改变它们. 这部门内容 ...

  5. Spring笔记:AOP基础

    Spring笔记:AOP基础 AOP 引入AOP 面向对象的开发过程中,我们对软件开发进行抽象.分割成各个模块或对象.例如,我们对API抽象成三个模块,Controller.Service.Comma ...

  6. Spring:笔记整理(1)——HelloWorld

    Spring:笔记整理(1)——HelloWorld 导入JAR包: 核心Jar包 Jar包解释 Spring-core 这个jar 文件包含Spring 框架基本的核心工具类.Spring 其它组件 ...

  7. Spring笔记:IOC基础

    Spring笔记:IOC基础 引入IOC 在Java基础中,我们往往使用常见关键字来完成服务对象的创建.举个例子我们有很多U盘,有金士顿的(KingstonUSBDisk)的.闪迪的(SanUSBDi ...

  8. Spring笔记(6) - Spring的BeanFactoryPostProcessor探究

    一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...

  9. spring笔记----看书笔记

    上周末看了一章以前javaee轻量级的书spring部分,简单做了一些笔记 // ApplicationContext ac=new ClassPathXmlApplicationContext(&q ...

  10. Spring 笔记(三)Bean 装配

    前言 Spring 有两大核心,也就分成两份笔记分别记录. 其一是管理应用中对象之间的协作关系,实现方式是依赖注入(DI),注入依赖的过程也被称为装配(Wiring). 基于 JavaConfig 的 ...

随机推荐

  1. 201521123028 《Java程序设计》第12周学习总结

    1. 本周学习总结 流与文件 I/O流:Input/Output处理的简称,本质上就是一个数据序列.分为输入流Input Stream和输出流Output Stream. 最基本的可处理数据单位-by ...

  2. Hibernate逆向工程【PowerDesigner、idea环境下】

    为什么要使用逆向工程 由于我们每次编写Hibernate的时候都需要写实体,写映射文件.而且Hibernate的映射文件也容易出错.而逆向工程可以帮我们自动生成实体和映射文件,这样就非常方便了. 使用 ...

  3. 文件的inode号操作

    linux给每个文件生成了一个唯一的inode编号,命令行下操作文件需要输入文件名,如果遇到文件名特别难输入(或者包含特殊符号)的情况,可以用inode号操作文件. 可以用这个命令查看inode号: ...

  4. PHP 安装配置

    ./configure --prefix=/usr/local/php --with-libdir=/lib/x86_64-linux-gnu --with-config-file-path=/usr ...

  5. 全栈工程师带你开发 ,node开发人脸识别门禁系统

    效果图:       知识点: 人脸识别SKD部署,  webRTC视频流处理,URL构建blob对象,Canvas映射截图,ajax数据交互,Node图像处理,跨域与413处理,base64解码,p ...

  6. asp.net core权限模块的快速构建

    大部分系统都会有权限模块,别人家系统的权限怎么生成的我不知道,我只知道这样做是可以并且挺好的. 文章中只对asp.net core的部分代码进行说明 呃 记录~,mvc版本自行前往仓库查阅 代码中的一 ...

  7. 【转】Mapreduce部署与第三方依赖包管理

    Mapreduce部署是总会涉及到第三方包依赖问题,这些第三方包配置的方式不同,会对mapreduce的部署便捷性有一些影响,有时候还会导致脚本出错.本文介绍几种常用的配置方式: 1. HADOOP_ ...

  8. mybatis 错误CGLIB is not available

    ### Error querying database. Cause: java.lang.IllegalStateException: Cannot enable lazy loading beca ...

  9. 风趣的JavaScript面向对象入门课程一

    在我们程序猿界一直流传这这么一个joke,没女票我们可以new一个.没房子没票子没车子我们同样new一个!当然这听着更像是一种自嘲,毕竟我们程序猿都爱自嘲,哈哈,废话不多说,今天就由我带着你们来入Ja ...

  10. JPEG流封装AVI视频

    前言:前几天工作任务,要把JPEG流封装为AVI视频,就找了些AVI文件结构资料和示例代码研究了下,现将学习总结及最终完成的可用代码分享出来,由于本人也是现学现用,如有不恰当或错误之处,欢迎提出! 1 ...