Spring框架-第一弹
简介
文章将介绍以下内容:
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)
耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息
内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
实际开发应该是高内聚,低耦合
耦合的两面性:一方面,如果精密耦合的代码将难以测试、难以复用、难以理解,并且会出现‘打地鼠‘式的bug特性(修复一个bug,另一个bug又出现了);另一方面,一定耦合程度又是必须的,完全没有耦合的代码什么也做不了
依赖注入的两种方式:构造器注入和setter方法注入
-
应用切面
切面编程:指的就是不修改之前的代码,在这个基础上对方法进行修饰,如日志功能
消除样板式代码(如jdbc)
。。。(更多精彩内容等待你慢慢发觉)
装配Bean
三种装配方式
xml中显示装配
java中显示装配
自动装配
该项目已经上传到码云
自动装配
-
注解标签(@Component/@Repository/@Service/@Controller)
这些标签其实没有什么差别,只不过在使用时为了给相应的类进行分类,便于理解
-
启动注解扫描
- xml方式:
<context:component-scan />
- java配置
@Configuration @ComponentScan(basePackages = {"cn.simfg.note.bean"})
- xml方式:
操作:
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对应的类
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();
}
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,让我们一起探索世界吧
推荐阅读
-
Spring+Hibernate+Struts(SSH)框架整合实战
-
IOS框架Spring常用的动画效果
-
Spring框架学习笔记(3)——SpringMVC框架
-
深入剖析 RabbitMQ —— Spring 框架下实现 AMQP 高级消息队列协议
-
Spring+Spring MVC+Mybatis 框架整合开发(半注解半配置文件)
-
javaweb各种框架组合案例(六):springboot+spring data jpa(hibernate)+restful
-
Spring框架学习-Spring和IOC概述
-
Mybaits 源码解析 (十)----- 全网最详细,没有之一:Spring-Mybatis框架使用与源码解析
-
使用netbeans搭建jsf+spring框架的方法
-
Spring框架的使用