zoukankan      html  css  js  c++  java
  • Spring基础学习笔记

    1. Spring入门

    1. 1 Spring的体系结构

    1.2 HelloWorld

    1.2.1 Maven的使用

    1)maven 的javase工程目录结构:

    2)maven的settings.xml的配置:更改镜像,指定仓库地址,指定代理服务器

    1.2.2 第一个程序

    1. 所需的基础JAR包:core、context、beans、commons-logging
    2. applicationContext.xml文件:sxd的配置和版本
    3. 定义java 类
    4. 将类在applicationContext.xml文件中配置成bean
    5. 编写测试类:实例化容器,从容器中获取对象,执行其方法

    2. SpringIOC(DI)

    2. 1 IOC(DI)概念思想

    • IOC:Iversion of Control控制反转,创建对象权力的转移
    • DI:Dependency Injection依赖注入,依赖对象的实例化和注入

    2.2 Spring IOC容器的实例化方式

    1)BeanFactory:

    BeanFactory beanFac = new XmlBeanFactory(new FileSystemResource("D:\eclipse-workspace\ch1\src\applicationContext.xml"));

    2)ApplicationContext

    1. ClassPathXmlApplicationContext方式:
      ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");
    2. FileSystemXmlApplicationContext:方式:
      ApplicationContext appCon = new FileSystemXmlApplicationContext("D:\eclipse-workspace\ch1\src\applicationContext.xml");
    3. 通过Web服务器实例化ApplicationContext容器

    2.3 依赖注入的方式

    1)构造方法实例化bean

    注意:接口不能实例化,不能配置成bean

    2)构造方法

    <bean id="userService" class="com.qst.service.UserServiceImpl">
    	<constructor-arg index="0" ref="userDao"></constructor-arg>
    </bean>
    

    3)setter方法注入

    <bean id="userService" class="com.qst.service.UserServiceImpl">
    	<property name="userDao" ref="userDao"></property>
    </bean>
    

    3. Spring Bean

    3.1 Bean的配置

    id class scope

    3.2 Bean的实例化

    1. 通过构造函数
    2. 静态工厂实例化:工厂方法需要定义为static
    3. 实例工厂实例化:

    3.3 Bean的作用域scope

    默认:singleton 其他:prototype(通常用于控制器)、requestsessionapplication

    3.4 Bean的生命周期

    singleton作用域的bean是被容器管理的,在容器启动时即被初始化,在容器关闭时回收
    Prototype|requestsessionapplication等作用域的bean的生命周期不被容器管理

    3.5 Bean的装配

    1)基于XML配置的装配

    优势:关系清晰,全被在配置文件中展现
    缺陷:编写复杂
    复杂类型的注入:setlistmap

    2)基于注解的装配

    (1)类的修饰

    • @Component:适用于任何类
    • @Repository适用于DAO
    • @Service适用于service
    • @Controller适用于controller

    (2)类之间的依赖(修饰属性,完成注入)

    • @Autowired:按类型注入,若想附加按名称找:@Autowired@Qualifier("userService2Impl")
    • @Resource:先按名称注入,名称找不到时再按类型

    4. Spring AOP

    4.1 AOP思想(Aspect orenti Programming)

    AOP采取横向抽取机制,即将分散在各个方法中的重复代码提取出来,然后在程序编译或运行阶段,再将这些抽取出来的代码应用到需要执行的地方。这种横向抽取机制,采用传统的OOP是无法办到的,因为OOP实现的是父子关系的纵向重用。但是AOP不是OOP的替代品,而是OOP的补充,它们相辅相成。
    AOP中的专业术语:连接点、切面、切入点、通知、目标对象、代理对象、织入

    4.2 AOP的实现

    1)实现时机:

    • 编译器织入,需要有特殊的Java编译器;
    • 类装载期织入,需要有特殊的类装载器;
    • 动态代理织入,在运行期为目标类添加通知生成子类的方式。
    • Spring AOP框架默认采用动态代理织入,而AspectJ(基于Java语言的AOP框架)采用编译器织入和类装载期织入。

    2)实现方式:

    1. JDK动态代理
    2. CGLIB动态代理
    3. SpringProxyFactoryBean(内部机制JDK动态代理)
    4. AspectJ
      ①基于xml配置
      ②基于注解配置
      <aop:aspectj-autoproxy proxy-target-class="true"/>
      @Aspect、@Before等五類通知

    3)新增所需jar包

    spring-aop、spring-aspects、spring-expression、aspectjweaver、aopalliance

    4)通知的類型

    五種,執行順序

    5. Spring 数据库操作

    5.1 Sping JDBC如何配置

    1)新增所需jar包:spring-jdbc、mysql-connector

    2)配置数据源和JDBCTemplate

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    			<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    			<property name="url" value="jdbc:mysql://localhost:3306/spring?characterEncoding=utf8"></property>
    			<property name="username" value="root"></property>
    			<property name="password" value="root"></property>
    		</bean>
    		<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    			<property name="dataSource" ref="dataSource"></property>
    		</bean>
    

    5.2 Spring JDBCTemlate的用法

    1)在DAO类种注入JDBCTemplate对象

    2)调用JDBCTemplate对象的update()执行增删改、调用query()方法执行查询

    6. Spring事务管理

    6.1 Spring 編程式事務

    将事务实现代码硬编码到业务类中,污染核心业务
    //设置事务属性
    TransactionDefinition defination=new DefaultTransactionDefinition();
    //开启事务
    TransactionStatus ts = txManager.getTransaction(defination);
    //事务提交
    txManager.commit(ts);
    //事务回滚
    txManager.rollback(ts);

    6.2 Spring 声明事务

    将事务处理和业务处理进行分离,在业务代码运行期进行插入,依靠AOP机制实现
    实现方式:

    1)基于xml

    <!-- 事务通知 -->
    <tx:advice id="myAdvice" transaction-manager="txManager">
    	<tx:attributes>
    		<tx:method name="add*" propagation="REQUIRED" isolation="DEFAULT" read-only="false" rollback-for="RuntimeException"/>
    	</tx:attributes>
    </tx:advice>
    
    <aop:config>
    	<aop:pointcut expression="execution(* com.qst.dao.*.*(..))" id="mytxpointcut"/>
    		<aop:advisor advice-ref="myAdvice" pointcut-ref="mytxpointcut"/>
    	</aop:config>
    

    2)事务的传播属性(行为)

    propagation="REQUIRED"/NOT_SUPPORTED/REQUIRES_NEW/SUPPORTS

    3)基于注解

    (1)在需要使用事务的service类中加入以下注解:
    @Transactional(propagation=Propagation.REQUIRED)

    (2)在applicationContext.xml中加入:

    <bean id="txManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    		<property name="dataSource" ref="dataSource"></property>
    </bean>
    <tx:annotation-driven transaction-manager="txManager"/>
    
  • 相关阅读:
    一个不错的谈架构的链接
    监控报警平台设计思路
    从数据库到NoSQL思路整理
    大数据流式计算:关键技术及系统实例
    接口和类
    学习的逻辑
    [kuangbin带你飞]专题五 并查集 J
    [kuangbin带你飞]专题五 并查集 E
    [kuangbin带你飞]专题五 并查集 D
    [kuangbin带你飞]专题五 并查集 C
  • 原文地址:https://www.cnblogs.com/nqdxt/p/Spring.html
Copyright © 2011-2022 走看看