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)
耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息
内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
实际开发应该是高内聚,低耦合
耦合的两面性:一方面,如果精密耦合的代码将难以测试、难以复用、难以理解,并且会出现‘打地鼠‘式的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 */ // 自动注入标签@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,让我们一起探索世界吧
- Spring框架-第一弹
- Spring框架第一讲
- 第一部分:spring框架概述
- 第一部分:spring框架概述
- spring框架下的第一个实例
- Spring框架学习(第一讲)
- Spring框架整体巩固学习 第一部分
- Spring框架总结——第一部分
- 3、SSM框架-Spring第一个Spring HelloWorld(3)
- 使用Spring框架开发的第一个实例
- Java框架学习笔记——第一个Spring示例
- spring 框架搭建并创建第一个小程序
- 写出我的第一个框架:迷你版Spring MVC
- Spring MVC框架下的第一个Hello World程序
- 写出我的第一个框架:迷你版Spring MVC
- 第一个Spring MVC框架的hello world项目
- Spring框架-第二弹
- Spring框架-第三弹
- 十进制转十六进制的C实现
- 【HDU 1003】 Max Sum
- <C++ Primer_5th>习题_3.22
- 167. Two Sum II
- <C++ Primer_5th>习题_3.23
- Spring框架-第一弹
- ios-frame和bounds
- LinkList_Stack(链式栈)
- 第2篇 SercureCRT使用root远程登录ubuntu16.04
- <C++ Primer_5th>习题_3.24
- CodeForces
- <C++ Primer_5th>习题_3.25
- <C++ Primer_5th>习题_3.31
- 3 文本编辑器vim