欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring框架-第一弹

程序员文章站 2022-06-19 10:45:35
...

简介

文章将介绍以下内容:

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框架-第一弹

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
 */
 // 自动注入标签
@Component
public 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对应的类

Spring框架-第一弹

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.编写测试方法

@Autowired
private Group group;

@Test
public void testGroup(){
    group.hello();
}

Spring框架-第一弹

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.测试

@Test
public 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,让我们一起探索世界吧