Spring的入门学习笔记 (注脚)

Spring的入门学习笔记 (注脚)

 

//////////2017-2-18 ~ 2017-2-26///////////

评释注入属性
  1. 创建service类,创建dao类,在service得到dao对象
    流入属性第二个评释@AutoWired
![](https://upload-images.jianshu.io/upload_images/3943248-aa241af401271e94.png)

@AutoWired.png

流入属性第二个声明@Resource name要和传颂对象的值同样

  • 常用,能够钦点注入什么目的
![](https://upload-images.jianshu.io/upload_images/3943248-cc19c817544b4ae6.png)

@Resource.png

package com.ghw.anno;

import org.springframework.stereotype.Component;

@Component(value = "userdao")
public class UserDao {
    public void add() {
        System.out.println("UserDao.....");
    }
}

package com.ghw.anno;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service(value = "userservice")
public class UserService {

    @Autowired
    private UserDao userdao;

    public void add() {
        System.out.println("UserService.....");
        userdao.add();
    }
}

(三)xml配置文件和注释格局混合使用

  1. 创设对象操作使用安顿文件贯彻

<bean id="bookservice" class="com.ghw.xmlanno.BookService"></bean>
<bean id="bookdao" class="com.ghw.xmlanno.BookDao"></bean>
<bean id="ordersdao" class="com.ghw.xmlanno.OrdersDao"></bean>
  1. 流入属性操作使用声明方式贯彻

//注解扫描方式下面俩种
<context:component-scan base-package="com.ghw.xmlanno"></context:component-scan>
<context:annotation-config></context:annotation-config>

public class BookService {
    @Resource(name = "bookdao")
    private BookDao bookdao;
    @Autowired
    private OrdersDao ordersdao;

Aspectj的aop操作

澳门新萄京 1

 

 澳门新萄京 2

 

 澳门新萄京 3

 

澳门新萄京 4

 

  二.做spring的ioc注明开垦,引进新的羁绊(context)

Spring概念

一.spring是开源的轻量级框架

贰.spring大旨首要两有的:
    (一)aop:面向切面编制程序,扩充功效不是修改源代码完毕的
   
(贰)ioc:调控反转,例如有二个类,在类里面有办法(非静态),调用类里面包车型大巴办法,创立类的靶子,使用对象调用方法,创造类对象的长河,须要new来新建对象,而在spring中无需经过new,而是交由spring配置创建类对象

三.spring是一站式框架
    spring在javaee三层协会中,每壹层都提供分歧的缓慢解决技术
        web层:springMVC
        service层: spring的ioc
        dao层:spring的jdbcTemplate

4.spring版本
    (1)hibernate5.x
    (2)spring4.x   

1.spring的bean管理(注解):

讲明介绍:

  1. 代码里面极其标记,使用声明能够成功作用
  2. 评释写法 @注明名称(属性名称=属性值)
  3. 讲明使用在类,方法,属性上面

Spring整合web项目示范

1 演示难点

(1)action调用service,service调用dao

 澳门新萄京 5

每一趟访问action时候,都会加载spring配置文件

二 化解方案:

(1)在服务器运维时候,创制对象加载配置文件

(二)底层使用监听器、ServletContext对象

三 在spring里面无需大家自身写代码完成,帮封装

(壹)封装了多个监听器,只须要 配置监听器 就足以了

(二)配置监听器此前做作业:导入spring整合web项目jar包

 澳门新萄京 6

澳门新萄京 7

 

(3)内定加载spring配置文件地点

  倘若不钦点spring配置文件的职位,会有如下错误:

澳门新萄京 8

 澳门新萄京 9

澳门新萄京 10

就加载以此xml文件: 

 澳门新萄京 11

 

 

**后续越来越多请见Spring框架学习笔记(3)………………**

@Component(Value="user") //等同于<bean id = "user" class = "">
public class User{

    public void add(){
            system.out.println("add.........")

    }  
}

Spring事务管理

   
事务是数据库操作中最宗旨的单位,是一组操作,对于2个东西来讲,当中间的操作依旧全都实践,要么都不推行。事务本性:ACID

澳门新萄京,事务管理的api
    一.spring事务管制的二种格局
        壹编制程序式事务管理(不用)
        二注解式事务管理(xml/表明)
    2.spring事务管理的api
        一 . spring针对差异的dao层框架,提供分化的贯彻类
        二 . 首先,配置事务管理器
            一创造数据库
            2开立service和dao层,完结注入涉及
        叁 . 配置事务管理器

}

第三个 修改
public void update() {
    // 修改操作
    // 设置数据库的信息
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql:///spring_day03");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    // 创建jdbcTemplate对象
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    // 调用jdbcTemplate里面的方法实现update方法
    String sql = "update user set password=? where username = ?";
    int rows = jdbcTemplate.update(sql, "1314", "gouge");
    System.out.println(rows);
}

Spring的aop操作 

壹 在spring里面进行aop操作,使用aspectj达成

(一)aspectj不是spring一部分,和spring一同利用进行aop操作

(贰)Spring二.0未来新扩展了对AspectJ协助

 

贰 使用aspectj实现aop有三种方法

(1)基于aspectj的xml配置

(贰)基于aspectj的评释格局

public class Test{
   @Test 
    public void testService(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        User user=(UserService) context.getBean("userService");
        userService.add();
    }
}

int study_data(){

(3)aop操作相关术语(精通一个术语)

澳门新萄京 12

image.png

Pointcut(切入点):所谓切入点是指大家要对怎么样Joinpoint实行阻拦的概念
浅显解释:在类里面能够有广大的措施被增进,比如实操中,只是坚实了类里面包车型客车add方法和update方法,实际拉长的不二等秘书诀称为切入点
Advidce(文告/加强):所谓通知是指拦截到Joinpoint之后所要做的政工正是打招呼,布告分前置布告,前置文告,卓殊通告,最终文告,环绕文告(切面要到位的作用)
深刻浅出解释:巩固的逻辑,称为巩固,例如扩张日志作用,这么些日志功用称为加强
停放布告:在格局以前试行
前置文告:在措施之后实践
不行通知:方法出现至极
末尾文告:在前置之后实行
围绕文告:在艺术此前和后来都实践
Aspect(切面):是切入点和公告(引导介绍)的咬合
通俗解释:把压实应用到具体的措施方面,进程称为切面
连接点:类里面哪些措施能够被拉长,那一个方法称为连接点

使用表明式配置切入点

  1. 切入点:实际增进的主意
  2. 常用表明式
    execution(<访问修饰符>?<重临类型><方法名>(<参数>)(<十分>)
    常用的:
    (1)execution(* com.ghw.aop.Book.add(..))
    抓牢钦定的add方法
    (2)execution(* com.ghw.aop.Book.(..))
    增长Book类中具备办法
    (3)execution(
    .(..))
    巩固全数办法
    (4)execution(* save*(..))
    提升save初阶的措施

陈设文件和注释混合使用

一 创设对象操作使用陈设文件方式贯彻

 澳门新萄京 13

 

二 注入属性的操作使用申明格局实现

澳门新萄京 14

三.足以用在类,方法,属性上都足以

IOC

Spring的ioc操作
    壹.把指标的始建立外交关系给spring举行管制
    2.ioc操作两局地:
        (一)ioc的布置文件格局
        (二)ioc的批注方式

ioc的平底原理
    一.ioc底层法则使用才干
        (一)xml配置文件
        (2)dom4j解决xml
        (3)工厂设计形式
        (四)反射(通过反射机制创制实例对象)

案例步骤
    一.创立项目
    2.导入jar包
        (1)多少个核心jar包:beans,core,context,spEL
        (二)导入援助日志输出的jar包
    三.创建类,增多办法
    4.创设spring配置文件,配置bean
       
(一)spring宗旨配置文件名称和岗位不是一定的,建议松手src上边,官方建议名称叫applicationContext.xml
        (2)引入schema约束
        (三)配置对象制造(bean)
    5.测试案例

Spring的bean管理(xml方式)
    一.Bean实例化的不二等秘书技
        (一)在spring里面通过安排文件创设对象
        (二)a)Bean实例化二种完毕情势
            (i)使用类的无参构造函数创制
            (ii)使用静态工厂创造
            (iii)使用实例工厂创设
        (三)Bean标签的常用属性
           
一id属性:起名称,id属性值率性命名(id属性不能够为中文,不能够有特殊符号,依据id值获得配置对象)
            贰class属性:成立对象所在类的全路线
           
3name属性:成效和id属性同样,不过name能够属性值里面能够包罗特殊符号,一般用来是为了合作struts1.0而存在
            ④scope属性:

Bean的引用

引用配置文件中的bean
<ref bean=”somebean” />
引用别的bean中的属性值
<property name=”someProperty” value=”${bean.someProperty}” />

属性注入
    1.创建对象的时候,向类里面包车型地铁质量注入值
    2.属性注入的两种方式
        1运用set方法注入
        贰选择有参的构造函数注入
        3接口注入

ioc与di区别
    1.ioc:调整反转,把对象创设交给spring举行陈设
    2.di:依赖注入,向类里面包车型地铁质量中装置值,通过java反射完毕
    叁.涉及:注重注入不能够独立存在,要求在ioc的根基上成功

Spring的bean管理(声明情势)     一.注明使用办法
        ①导入jar包(aop包)
        贰创制类,增多格局
        3创制spring配置文件(须要context约束)
        四敞开声明扫描<context:component-scan base-package=”…”
/>
    二.开立注明对象
        ①@Component(实体层)
        ②@Controller(web层)
        ③@Service(业务层)
        ④@Repository(持久层)
   
那多少个评释的功力是壹律的,都以创制对象,只是为着让标注类本身的用途越发清楚
    3.装置对象为单实例/多实例
        @Scope(value=“singletonType/protoType”)
    四.讲授注入属性
       
@Autowired:首先通过byName查找,找不到则透过byType查找,借使类型存在且唯1则注入,不然抛出非凡
        @Qualifier(value=”asd”):直接通过byName查找
        @Resource(name=“beanName”)        

1.基于AspectJ注解的aop操作(会用)

AOP概念

一 aop:面向切面(方面)编制程序,增加成效不修改源代码达成

二  AOP采用横向抽取机制,取代了思想纵向承接体系重复性代码

三 aop尾部使用动态代理完成

(1)第1种情景,有接口境况,使用动态代理成立接口达成类代理对象

(2)第1种状态,未有接口情况,使用动态代理创立类的子类代理对象

测试

第二个 删除
public void delete() {
    // 删除操作
    // 设置数据库的信息
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql:///spring_day03");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    // 创建jdbcTemplate对象
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    // 调用jdbcTemplate里面的方法实现update方法
    String sql = "delete from user where username=?";
    int rows = jdbcTemplate.update(sql, "gouge");
    System.out.println(rows);
}

AOP操作术语

Joinpoint(连接点): 类里面可以被提升的点子,这一个办法称为连接点

Pointcut(切入点):所谓切入点是指我们要对什么Joinpoint举办阻拦的定义.

Advice(通告/加强):所谓通知是指拦截到Joinpoint之后所要做的事务正是公告.布告分为前置公告,前置文告,分外公告,最后通告,环绕布告(切面要到位的功力)

Aspect(切面):
是切入点和通知(引导介绍)的组合

 

Introduction(引导介绍):引导介绍是壹种新鲜的通报在不修改类代码的前提下,
Introduction能够在运营期为类动态地拉长一些方法或Field.

Target(指标对象):代理的目的对象(要增长的类)

Weaving(织入):是把坚实应用到指标的进度.

              把advice 应用到 target的过程

Proxy(代理):一个类被AOP织入巩固后,就时有产生1个结出代理类.

 

二.注明写法
@注脚名称(属性名称=属性值)

第一个 增加
  1. 导入jdbcTemplate使用的jar包还有数据库驱动jar包

澳门新萄京 15

image.png

  1. 创制对象,设置数据库新闻

// 设置数据库的信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_day03");
dataSource.setUsername("root");
dataSource.setPassword("root");
  1. 始建 jdbcTemplate对象,设置数据源

// 创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  1. 调用 jdbcTemplate对象里面包车型大巴法子达成操作

澳门新萄京 16

image.png

// 调用jdbcTemplate里面的方法实现update方法
String sql = "insert into user values(?,?)";
int rows = jdbcTemplate.update(sql, "gouge", "250");
System.out.println(rows);  //输出更改的条数

 

创制类,创制方法

三.Spring布署连接池和dao使用jdbcTemplate
  1. spring配置c3p0连接池
    第一步 导入jar包

澳门新萄京 17

导入jar包.png

第3步 创建spring配置文件,配置连接池

澳门新萄京 18

image.png

(一)把代码在布局文件中张开布置

<!-- 配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <!-- 注入属性值 -->
    <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    <property name="jdbcUrl" value="jdbc:mysql:///spring_day03"></property>
    <property name="user" value="root"></property>
    <property name="password" value="root"></property>
</bean>
  1. dao使用jdbcTemplate
    (1)创建service和dao,配置service和dao对象,在service注入dao对象

<!-- 创建Service对象,在service中注入dao对象 -->
<bean id="userservice" class="com.ghw.c3p0.UserService">
    <property name="userdao" ref="userdao"></property>
</bean>
<!-- 创建Dao对象,在dao中注入jdbctemplate对象 -->
<bean id="userdao" class="com.ghw.c3p0.UserDao">
    <property name="jdbcTemplate" ref="jdbctemplate"></property>
</bean>

(2)创制jdbcTemplate对象,在dao里面注入模板对象jdbctemplate

<!-- 创建Dao对象,在dao中注入jdbctemplate对象 -->
<bean id="userdao" class="com.ghw.c3p0.UserDao">
    <property name="jdbcTemplate" ref="jdbctemplate"></property>
</bean>
<!-- 创建jdbcTemplate对象-->
<bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate"></bean>

(3)在jdbcTemplate对象里面注入dataSource

<!-- 在jdbctemplate中注入dataSource对象 -->
<bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"></property>
</bean>

澳门新萄京 19

image.png


AOP原理

画图剖判原理

澳门新萄京 20

 

澳门新萄京 21

 

 

澳门新萄京 22

@component(value="userservice")  
public class UserService{
//得到dao的对象
@Autowried
private UserDao userDao;
//不需要写set方法

public void add{
        system.out.println("add......");
     userDao.add();
    }  
}


@component(value="userdao")
public class UserDao{
  public void add{
        system.out.println("dao......");
    }  
}

IOC入门案例:
第一步 导入jar包
jar特点:三个 文档,源代码
导入5个jar包:beans context core expression 还有commons-logging
其次步 创立3个类,在类里面创立方法

log4j介绍

一 通过log四j能够看来程序运营进程中更详实的消息

(一)平日应用log4j查看日志

2 使用

(1)导入log4j的jar包

(二)复制log四j的配备文件,复制到src上边

澳门新萄京 23

 

3 设置日志等第

 澳门新萄京 24

 

(1)info:看到中央新闻

(贰)debug:看到更详实音信 

一.创设对象一般都用配备文件得以实现

7.spring注入复杂类型数据
  1. 数组
  2. list集合
  3. map集合
  4. properties类型
    代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="service" class="com.ghw.spring.Service">

        <!-- 数组 -->
        <property name="arrs">
            <list>
                <value>李书豪</value>
                <value>程宇轩</value>
                <value>祝上杰</value>
            </list>
        </property>

        <!-- List -->
        <property name="list">
            <list>
                <value>list1</value>
                <value>list2</value>
                <value>list3</value>
            </list>
        </property>

        <!-- Map -->
        <property name="map">
            <map>
                <entry key="map1" value="mapvalue1"></entry>
                <entry key="map2" value="mapvalue2"></entry>
                <entry key="map3" value="mapvalue3"></entry>
            </map>
        </property>

        <!-- properties -->
        <property name="properties">
            <props>
                <prop key="driverclass">com.mysql.jdbc.Driver</prop>
                <prop key="username">root</prop>
            </props>
        </property>
    </bean>

</beans>

package com.ghw.spring;

import java.util.List;
import java.util.Map;
import java.util.Properties;

public class Service {

    private String arrs[];
    private List<String> list;
    private Map<String, String> map;
    private Properties properties;

    public void setArrs(String[] arrs) {
        this.arrs = arrs;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    public void print() {
        for (int i = 0; i < arrs.length; i++) {
            System.out.println("arrs[" + i + "]:" + arrs[i]);
        }
        System.out.println("list:" + list);
        System.out.println("map:" + map);
        System.out.println("properties:" + properties);
    }
}

解说成立对象

1 在创造对象的类方面运用申明完结

 澳门新萄京 25

澳门新萄京 26

 

二 创立对象有八个注解

 澳门新萄京 27

(1)@Component

(2)@Controller

(3)@Service

(4)@Repository

此时此刻那七个评释功能是一样的,都创立对象

在测试的时候遭受了叁个荒谬,提醒如下:

澳门新萄京 28

本条荒唐找了一会,终于找到错误所在,是因为澳门新萄京 29葡萄紫框框内的包未有导入成功促成的,直接复制进去未遂,然后Build
Path一下就足以了。化解难点了。

 

叁 成立对象单实例依旧多实例

澳门新萄京 30

注脚注入属性

二.spring核心重要俩部分:
(一)aop:面向切面编制程序,扩大作用不是修改源代码实现
(贰)ioc:调控反转

Spring的bean管理(注解)

导入

1.spring是开源的轻量级框架

讲解注入属性

1 创建service类,创建dao类,在service得到dao对象

流入属性第二个证明 @Autowired

(1)创建dao和service对象

 澳门新萄京 31

澳门新萄京 32

(2)在service类里面定义dao类型属性

 澳门新萄京 33

流入属性第四个表明 @Resource

澳门新萄京 34

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图