Spring学习-黑马笔记整理

初识spring

spring是什么

Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核。

spring的优势

  1. 方便解耦,简化开发
    通过Spring提供的IOC容器可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度耦合。

  2. AOP编程的支持
    通过Spring的AOP功能,方便进行面向切面编程,许多不容易通过OOP实现的功能可以通过AOP轻松实现。

  3. 声明式事务的支持
    将我们从单调的事务管理代码中解放出来,通过声明式灵活的管理事务,提高开发效率和开发质量。

  4. 方便程序的测试
    可以用非容器依赖的方式进行几乎所有的测试工作。

  5. 方便集成各种优秀框架
    Spring支持各种优秀的框架(如Struts、Hibernate等)。

  6. 降低Java EE API的使用难度
    Spring对Java EE API(如JDBC)进行了封装,使这些API的使用难度大为降低。

  7. Java源码是经典学习典范。

spring的体系结构

在这里插入图片描述

spring程序开发

spring基本坐标

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.0.5 RELEASE</version>
</dependency>

spring配置文件

Bean标签基本配置

<bean id="userDao" class="com.day01.dao.impl.UserDaoImpl scope="singleton"></bean>

id:Bean实例在spring容器中的唯一标识
class:Bean的全限定名称

Bean的标签范围配置

singleton:默认值;单例;当spring核心文件加载时,实例化配置的Bean实例
prototype:多例;调用getBean方法时实例化Bean

Bean生命周期配置

init-method:指定类中的初始化方法名称
destroy-method:指定类中销毁方法名称

使用spring API

ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService=(UserService)app.getBean("userService");
userService.save();

ClassPathXmlApplicationContext:它是从类的根路径下加载配置文件 。
FileSystemXmlApplicationContext:它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
AnnotationConfigApplicationContext :当使用注解配置容器对象时,需要使用此类来创建 spring 容器,它用来读取注解。

配置文件 import

主配置文件加载其他配置文件

<import resource=""/>

依赖注入

它是 Spring 框架核心 IOC 的具体实现。在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。

Bean的依赖注入方式

set方法注入

在UserServiceImpl中添加setUserDao方法

public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}

配置文件

<bean id="userDao" class="com.day01.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.day01.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
</bean>

构造方法注入

创建有参构造

public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }
}

配置文件

<bean id="userDao" class="com.day01.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.day01.service.impl.UserServiceImpl">
        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>

不同数据类型注入

UserDaoImpl类

public class UserDaoImpl implements UserDao {
    private String userName;
    private int age;
    private List<String> strList;
    private Map<String, User> userMap;
    private Properties properties;

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

    public void setStrList(List<String> strList) {
        this.strList = strList;
    }

    public void setUserMap(Map<String, User> userMap) {
        this.userMap = userMap;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void save(){
        System.out.println("save running.....");
    }
}

引用数据类型

配置文件

<bean id="userDao" class="com.day01.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.day01.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
</bean>

普通数据类型

配置文件

<bean id="userDao" class="com.day01.dao.impl.UserDaoImpl">
        <property name="userName" value="zhangsan"/>
        <property name="age" value="18"/>
    </bean>

集合数据类型

配置文件

    <bean id="user1" class="com.day01.domain.User"></bean>
    <bean id="userDao" class="com.day01.dao.impl.UserDaoImpl">
        <property name="strList">
            <list>
                <value>aaa</value>
                <value>bbb</value>
                <value>ccc</value>
            </list>
        </property>
        <property name="userMap ">
            <map>
                <entry key="user1" value-ref="user1"></entry>
            </map>
        </property>
        <property name="properties ">
            <props>
                <prop key="p1">pp1</prop>
                <prop key="p2">pp2</prop>
                <prop key="p3">pp3</prop>
            </props>
        </property>
    </bean>

spring 配置数据源

引入context命名空间和约束路径
Spring容器加载properties文件

<context:property-placeholder location="classpath:jdbc.properties"/>
<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.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

AOP

快速入门

导入AOP相关坐标

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.5.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.13</version>
    </dependency>

创建目标接口和目标类

public class TargetImpl implements TargetInterface {

    @Override
    public void method() {
        System.out.println("run....");
    }
}

创建切面类

public class Myaspect {
    public void before(){
        System.out.println("before.....");
    }
}

配置目标类和切面类

 <bean id="myaspect" class="com.day01.aop.Myaspect"></bean>
 <bean id="target" class="com.day01.aop.impl.TargetImpl"></bean>

配置织入关系

<aop:config>
        <aop:aspect ref="myaspect">
            <aop:before method="before" pointcut="execution(public void com.day01.aop.impl.TargetImpl.method())"></aop:before>
        </aop:aspect>
    </aop:config>

切点表达式

表达式语法:execution([修饰符] 返回值类型 包名.类名.方法名(参数))
访问修饰符可以省略
返回值类型、包名、类名、方法名可以使用星号* 代表任意
包名与类名之间一个点 . 代表当前包下的类,两个点 … 表示当前包及其子包下的类
参数列表可以使用两个点 … 表示任意个数,任意类型的参数列表
常用:execution(* com.springStudy. aop. * .* (…) )

JdbcTemplate

导入坐标

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
 <version>5.0.5.RELEASE</version>
</dependency>

spring产生JdbcTemplate对象

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	 <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
	  <property name="jdbcUrl" value="jdbc:mysql:///test"></property>
	  <property name="user" 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>

JdbcTemplate的常用操作

更新操作:
jdbcTemplate.update (sql,params)
查询操作:
jdbcTemplate.query (sql,Mapper,params)
jdbcTemplate.queryForObject(sql,Mapper,params)

事务控制

spring集成web环境

配置ContextLoaderListener监听器:导包spring-web,在web.xml中配置监听器。
使用WebApplicationContextUtils获得应用上下文

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值