Spring框架叙述

  • spring技术
  • spring的核心内容
  • 详细步骤
  • Ioc
  • IOC操作的bean管理
  • IOC 操作 Bean 管理(基于注解方式)
  • 总结

spring技术

spring顾名思义就是春天的意思,但是一年四季,春夏秋冬,只有春,其他三个不要了吗?就是意味着这个框架的到来就是春天,简化了我们平时的挺多java的繁琐,复杂,重复的操作。

spring的核心内容

  1. IOC容器; 把创建的对象交给spring管理
  2. AOP; 不修改源代码,功能增强
  3. IJDBCTemplete
  4. 事务管理
  5. Spring5新特性

详细步骤

1.创建maven项目

2.导入spring5相关的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.th</groupId>
    <artifactId>mmvn_test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- 传递性 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>


        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>


        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>



        <dependency>
            <groupId>net.sourceforge.cglib</groupId>
            <artifactId>com.springsource.net.sf.cglib</artifactId>
            <version>2.2.0</version>
        </dependency>



        <dependency>
            <groupId>org.aopalliance</groupId>
            <artifactId>com.springsource.org.aopalliance</artifactId>
            <version>1.0.0</version>
        </dependency>



        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>com.springsource.org.aspectj.weaver</artifactId>
            <version>1.6.8.RELEASE</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>




        <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.7</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>



    </dependencies>
</project>

3.创建一个普通类,编写一个普通方法。

4。创建spring配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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="user" class="com.th.test1.User"></bean>
</beans>

注:spring的配置文件都是含beans的。

5.测试类

spring中corn表达式每个月的倒数第五天 spring包含的月份_junit

综上所述,一个最简单的 spring小demo就实现了。

Ioc

概念:
翻译过来就是控制反转的意思,就是不用一直不停的去对象创建和对象的调用了,集中的交给spring去进行管理了。使用IOC可以降低耦合度。

原理:就是xml解析,工厂模式,反射机制。

IOC操作的bean管理

bean管理主要就是指两个操作
1.spring创建对象 2.spring注入属性。

bean的管理操作用两种方式,
1.xml
2,注解
由于结合后期的学习springboot,使用注解的方式较多,xml的方式虽然逻辑清晰,但是需要写大量的代码,建交委繁琐,所以主要讲注解方式。

IOC 操作 Bean 管理(基于注解方式)

1、什么是注解
(1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…)
(2)使用注解,注解作用在类上面,方法上面,属性上面
(3)使用注解目的:简化 xml 配置
2、Spring 针对 Bean 管理中创建对象提供注解
(1)@Component
(2)@Service
(3)@Controller
(4)@Repository

  • 上面四个注解功能是一样的,都可以用来创建 bean 实例

component一般处理的是普通层的操作。
service一般处理的是业务层的操作。
controller一般处理的是web层的操作。
repository一般处理的是dao层的操作。

3、基于注解方式实现对象创建

第一步 引入依赖

spring中corn表达式每个月的倒数第五天 spring包含的月份_junit_02


第二步 开启组件扫描

<context:component-scan base-package=“com.th”></context:component-scan>

第三步 创建类,在类上面添加创建对象注解

//在注解里面 value 属性值可以省略不写,
 //默认值是类名称,首字母小写
 //UserService – userService
 @Component(value = “userService”) //
 public class UserService {
 public void add() {
 System.out.println(“service add…”);
 }
 }

4、开启组件扫描细节配置

<context:component-scan base-package=“com.atguigu” use-defaultfilters=“false”>
 <context:include-filter type=“annotation”expression=“org.springframework.stereotype.Controller”/>
 </context:component-scan>

5、基于注解方式实现属性注入
(1)@Autowired:根据属性类型进行自动装配
第一步 把 service 和 dao 对象创建,在 service 和 dao 类添加创建对象注解
第二步 在 service 注入 dao 对象,在 service 类添加 dao 类型属性,在属性上面使用注解

@Service
 public class UserService {
 //定义 dao 类型属性
 //不需要添加 set 方法
 //添加注入属性注解
 @Autowired
 private UserDao userDao;
 public void add() {
 System.out.println(“service add…”);
 userDao.add();
 }
 }

6、完全注解开发 (j就是放弃前面的所有xml操作,直接使用下面的这些注解就可以)
(1)创建配置类,替代 xml 配置文件

@Configuration //作为配置类,替代 xml 配置文件
 @ComponentScan(basePackages = {“com.th”})
 public class SpringConfig {
 }

7.编写测试类

@Test
 public void testService2() {
 //加载配置类
 ApplicationContext context
 = new AnnotationConfigApplicationContext(SpringConfig.class);
 UserService userService = context.getBean(“userService”,
 UserService.class);
 System.out.println(userService);
 userService.add();
 }

总结

个人学习的简单版的spring的aop操作如上所示,使用几个注解,就可以省去不断的new操作,和属性的注入问题,还使用了工厂类,降低了类和类之间的耦合度。还有反射机制。