Spring框架-第一弹

来源:互联网 发布:ubuntu修改hosts翻墙 编辑:程序博客网 时间:2024/05/31 06:23

  • 简介
  • web环境搭建
  • spring环境搭建
  • spring简介
  • 装配Bean
    • 三种装配方式
    • 自动装配
    • java显示配置
    • xml显示配置

简介

文章将介绍以下内容:

1.web环境搭建

2.spring框架环境搭建

3.spring简介

4.spring装配Bean(核心内容)

web环境搭建

1.为什么搭建这个环境呢?

因为spring一般都是用于web应用开发的,所以在在这里先搭建一个环境,方便以后使用

2.使用的开发环境:

  • idea 2017.2
  • jdk 1.8.0_144
  • tomcat 9.0.0.M20
  • maven

3.具体步骤:

可以百度下(idea2017 maven搭建web项目),第一个就是一个很好的答案,当然也有可能不是,只是在我电脑上是第一个。

主要是环境搭建的文章很多,所以这里就不描述了

如果遇到什么问题可以留言,看看我能不能帮你解决

4.然后就是测试运行了

spring环境搭建

在maven依赖文件中添加以下内容

<properties>    <spring.version>4.3.7.RELEASE</spring.version>    <aspectj.version>1.8.10</aspectj.version></properties><dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.12</version>    </dependency>    <!-- aspectj -->    <dependency>      <groupId>org.aspectj</groupId>      <artifactId>aspectjrt</artifactId>      <version>${aspectj.version}</version>    </dependency>    <dependency>      <groupId>org.aspectj</groupId>      <artifactId>aspectjweaver</artifactId>      <version>${aspectj.version}</version>      <scope>runtime</scope>    </dependency>    <!-- spring 框架包 -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-core</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-web</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-oxm</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-tx</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-jdbc</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-aop</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-test</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context-support</artifactId>      <version>${spring.version}</version>    </dependency>    <!-- spring测试框架 -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-test</artifactId>      <version>${spring.version}</version>    </dependency>  </dependencies>

然后添加几个文件夹

这里写图片描述

spring简介

当然肯定不是详细的写这玩意是什么什么,只是简单介绍下就好,当你慢慢对这个框架很熟悉的时候自然就明白了其中的道理。

1.简化Java开发

  • 依赖注入(DI)

    1. 耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息

    2. 内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。

    3. 实际开发应该是高内聚,低耦合

    4. 耦合的两面性:一方面,如果精密耦合的代码将难以测试、难以复用、难以理解,并且会出现‘打地鼠‘式的bug特性(修复一个bug,另一个bug又出现了);另一方面,一定耦合程度又是必须的,完全没有耦合的代码什么也做不了

    5. 依赖注入的两种方式:构造器注入和setter方法注入

  • 应用切面

    切面编程:指的就是不修改之前的代码,在这个基础上对方法进行修饰,如日志功能

  • 消除样板式代码(如jdbc)

  • 。。。(更多精彩内容等待你慢慢发觉)

装配Bean

三种装配方式

  • xml中显示装配

  • java中显示装配

  • 自动装配

该项目已经上传到码云

自动装配

  • 注解标签(@Component/@Repository/@Service/@Controller)

    这些标签其实没有什么差别,只不过在使用时为了给相应的类进行分类,便于理解

  • 启动注解扫描

    • xml方式:<context:component-scan />
    • java配置
      @Configuration@ComponentScan(basePackages = {"cn.simfg.note.bean"})

操作:
1.首先创建一个基本类User

package cn.simfg.note.bean;import org.springframework.stereotype.Component;/** * @Author: simfg * @Description: * @Date: 2017/10/3 */ // 自动注入标签@Componentpublic class User {    private String name;    private String password;    private int age;    private String description;    public User() {    }    public User(String name, String password, int age, String description) {        this.name = name;        this.password = password;        this.age = age;        this.description = description;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getDescription() {        return description;    }    public void setDescription(String description) {        this.description = description;    }    @Override    public String toString() {        return "User{" + "name='" + name + '\'' + ", password='" + password + '\'' + ", age=" + age                + ", description='" + description + '\'' + '}';    }    public void hello() {        System.out.println("hello, Spring");    }}

值得注意的是:这里又一个Component标签,不要忘了哟

2.Java配置(当然也可以xml配置,个人更喜欢java配置)

package cn.simfg.note.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import cn.simfg.note.bean.Group;import cn.simfg.note.bean.User;/** * @Author: simfg * @Description: * @Date: 2017/10/3 */@Configuration@ComponentScan(basePackages = {"cn.simfg.note.bean"})public class BeanConfig {}

注意:basePackages这个参数是指定扫描哪个包,如果不指定则扫描该文件下所在包下的所有类

3.测试装配

package cn.simfg.note.test;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import cn.simfg.note.bean.Group;import cn.simfg.note.bean.User;/** * @Author: simfg * @Description: * @Date: 2017/10/3 */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = { cn.simfg.note.config.BeanConfig.class})public class UserTest {    @Autowired    private User user;    @Test    public void testUser() {        user.hello();    }}

注意:RunWith和ContextConfiguration是运行环境配置,ContextConfiguration的classes参数是指定javaConfig对应的类

这里写图片描述

java显示配置

操作:

1.创建一个Group类

package cn.simfg.note.bean;import java.util.List;/** * @Author: simfg * @Description: * @Date: 2017/10/3 */public class Group {    private String name;    private List<User> users;    private User leader;    public Group() {    }    public Group(String name, List<User> users, User leader) {        this.name = name;        this.users = users;        this.leader = leader;    }    public User getLeader() {        return leader;    }    public void hello(){        System.out.println("This is a group.");    }}

注意:这里没有使用Component标签

2.编写JavaConfig

在BeanConfig这个类中添加以下代码:

@Bean("myGroup")public Group group(User user){    return new Group("God",null,user);}

3.编写测试方法

@Autowiredprivate Group group;@Testpublic void testGroup(){    group.hello();}

这里写图片描述

xml显示配置

注意:如果你想像上面一样在ContextConfiguration标签后配置上下文,那首先将classes删除,然后添加locations = {"classpath:spring.xml"},不可以两个同时使用

如果又兴趣可以试一下这种方法,接下来介绍另一种测试方法

操作;

1.编写一个spring.xml文件,内容如下:(在远程仓库中是resource下的default文件,将其后缀删除即可)

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:c="http://www.springframework.org/schema/c"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">    <bean id="user" class="cn.simfg.note.bean.User" c:name="simfg" c:age="20" c:description="I am simfg." c:password="abc" /></beans>

基本格式就是:<bean id="user" class="cn.simfg.note.bean.User" />

后面一大段是给User这个属性进行赋值,使用命名空间c

xml注入的两种方式

<!-- 构造法注入 -->    <bean id="user2" class="cn.simfg.note.bean.User">        <constructor-arg name="name" value="simfg"></constructor-arg>        <constructor-arg name="password" value="123"></constructor-arg>        <constructor-arg name="description" value="simfg"></constructor-arg>        <constructor-arg name="age" value="20"></constructor-arg>    </bean>    <!-- setter方法注入 -->    <bean id="user3" class="cn.simfg.note.bean.User">        <property name="name" value="simfg"/>        <property name="password" value="123"/>        <property name="description" value="simfg"/>        <property name="age" value="20"/>    </bean>

2.测试

@Testpublic void testXml(){    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring.xml");    User user = applicationContext.getBean(User.class);    user.hello();    System.out.println(user.getName());}

注意:

ClassPathXmlApplicationContext – xml方式

FileSystemXmlApplicationContext – xml方式(要是绝对路径,一般不使用)

AnnotationConfigApplicationContext – Java类型的配置

getBean():参数可以是一个Class(当只有一个实例化类型),如果你使用的三种方式来配置一个User,那么你传入的应该就是bean的id了


扫描右侧二维码,关注个人公众号:SimFG,让我们一起探索世界吧

原创粉丝点击