Maven生命周期、Spring核心技术IOC与AOP、Java中创建对象的5种方式(含使用Spring)
文章目录
- 一、Maven
- 1、什么是maven
- 2、Maven核心功能
- 3、Maven生命周期
- 二、Spring
- 1、Spring的Maven仓库核心依赖
- 2、Java中创建对象的方法
- 3、使用spring创建对象
- 4、spring创建对象顺序
- 5、spring的两大核心技术
一、Maven
1、什么是maven
管理项目的构建,报告和文档的项目管理工具软件。将程序中要使用的jar包存在放在maven仓库中,只需要在pom.xml文档中进行配置,就可以联网获得对应的jar包,而且会将所导入的jar包的所有依赖的jar包一起导入进去。
可以简单的理解为就是一个管理项目,管理依赖的工具
2、Maven核心功能
- 依赖管理
- 模块管理
- 插件管理
- 部署管理
3、Maven生命周期
maven将工程的构建过程理解为不同的生命周期和阶段, 一个工程的构建过程中,存在着不同的生命周期,生命周期间互相独立,没有一定的顺序关系。 每个生命周期又划分为不同的阶段,不同的阶段之间有明确的顺序关系, 同一生命周期内的阶段必须按顺序依次执行。
-
clear(清除)
- pre-clean:执行清理的准备工作
- clean:执行清理工作
- post-clean:执行清理后的后续工作
-
default(核心)
- validate:验证项目的正确性及项目所必需的信息是否可用
- compile:编译项目中代码
- test:用相关的单元测试框架测试编译后的代码,测试代码并不会随项目打包和布署
- package:将编译后的代码打包成相应的格式文件,如jar包
- integration-test: 如果需要在一个综合环境中运行我们的测试,这个阶段将会运行和布署项目到该环境中
- verify: 检查项目中的包是否正确与符合要求
- install:将包安装到本地maven仓库,其他项目也可以使用该包作为依赖
- deploy:将包发布到远程的maven仓库,并提供给其他开发者使用
-
site(建立发布项目站点)
- pre-site:准备生成
- site:生成项目站点和文档
- post-site:执行生成文档后的后续工作
- site-deploy:发布项目文档
二、Spring
1、Spring的Maven仓库核心依赖
springcore4.3.18
<!-- .springframework/spring-core -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.18.RELEASE</version>
</dependency>springcontext
<!-- .springframework/spring-context -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.18.RELEASE</version>
</dependency>
2、Java中创建对象的方法
-
new关键字
-
克隆,重写clone()方法
实体类实现Cloneable接口,重写clone()方法,调用clone()方法,克隆得到的对象与原来的对象不是一个对象
-
反射
得到Students类的Class对象,根据Class对象得到构造器,再根据构造器得到对象
-
对象反序列化
实体类实现Serializable接口,先序列化将对象写入文件中,再反序列化从文件中得到对象,记得关闭流
Students类
//Students类
package org.westos.domain;import java.io.Serializable;public class Students implements Cloneable, Serializable {private String sid;private String sname;private String gender;private String birthday;private String major;//实现Cloneable接口,重写父类的clone()方法@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}@Overridepublic String toString() {return "Students{" +"sid='" + sid + '\'' +", sname='" + sname + '\'' +", gender='" + gender + '\'' +", birthday='" + birthday + '\'' +", major='" + major + '\'' +'}';}public Students() {}public Students(String sid, String sname, String gender, String birthday, String major) {this.sid = sid;this.sname = sname;this.gender = gender;this.birthday = birthday;this.major = major;}public String getSid() {return sid;}public void setSid(String sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}
}
测试类
package org.westos.test;import org.westos.domain.Students;import java.io.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;public class Test {public static void main(String[] args) throws CloneNotSupportedException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, IOException, InvocationTargetException {//1.使用new关键字创建对象Students s1 = new Students("001", "张三", "男", "1993-02-03", "古文");System.out.println("s1:" + s1);//2.使用clone()方法创建对象Students s2 = (Students) s1.clone();System.out.println("s2:" + s2);System.out.println(s1 == s2);//s1与s2不相等//3.使用反射得到对象Class aClass = Class.forName("org.westos.domain.Students");//使用类名得到类的Class对象//使用构造器的参数得到构造器Constructor constructor = aClass.getConstructor(String.class, String.class, String.class, String.class, String.class);//使用构造器得到对象Students s3 = (Students) constructor.newInstance(new Object[]{"002", "李四", "男", "1994-02-04", "高数"});System.out.println("s3:" + s3);//4.使用反序列化得到对象//得到对象输出流File file = new File("studentLists.text");ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));//将对象序列化写到文件studentLists.txt中out.writeObject(s2);//得到对象输入流ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));//反序列化读取对象Students s4 = (Students) in.readObject();System.out.println("s4:" + s4);//关闭流资源in.close();out.close();}
}
3、使用spring创建对象
-
spring也不适用new关键字创建对象,使用Ioc容器注入
-
先在xml配置文档里配置好对象的属性与id值,得到与配置文档的连接,根据配置文档里id属性的值,得到对象(内部也是通过反射+xml文档的解析实现的)
-
对象的创建是通过默认无参构造创建的,而属性的初始化时使用set方法初始化的,所以一定要保留默认的无参构造和set方法
测试类
public class IocDemo2 {public static void main(String[] args) {//使用Spring的ioc拿到对象//得到context对象ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//得到Students对象Students s1 = (Students) context.getBean("s1");System.out.println(s1);} }
applicationContext.xml文档
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns=""xmlns:xsi=""xsi:schemaLocation=" .xsd"><!--定义学生对象--><bean id="s1" class="org.westos.domain.Students"><property name="sid" value="200"/><property name="sname" value="张三丰"/><property name="gender" value="男"/><property name="birthday" value="1998-10-10"/><property name="major" value="太极拳"/></bean> </beans>
4、spring创建对象顺序
- 加载applicationContext.xml文档
- 解析对应的id的对象
- 通过反射区调用默认无参构造
- 使用set方法初始化属性
5、spring的两大核心技术
-
IOC(DI),控制反转/依赖注入
如何理解依赖注入
-
创建对象,不适用new关键字
-
面向接口的编程,UsbInterface接口、Computer类、IocDemo3类
不修改代码,使用多态的形式,用IOC在配置文档中读取对象,修改配置文档
什么是IOC容器:xml文档中的beans标签就是一个IOC容器
为什么不推荐使用new创建对象
- 麻烦,可以直接在配置文档里面配置好,然后用的时候直接根据id属性获取对象就行了
-
-
AOP,面向切面的编程
- 可以简单的理解为在不改变原有程序的基础上为代码增加新的功能
2. 分为前置增强、后置增强、最终增强、异常增强、环绕增强
3. 需要在原有的类上定义一个切口(方法),然后定义一个用于增强的AOP类,可以在类中定义增强的方法。最后在xml配置文档中进行配置
- 可以简单的理解为在不改变原有程序的基础上为代码增加新的功能
Maven生命周期、Spring核心技术IOC与AOP、Java中创建对象的5种方式(含使用Spring)
文章目录
- 一、Maven
- 1、什么是maven
- 2、Maven核心功能
- 3、Maven生命周期
- 二、Spring
- 1、Spring的Maven仓库核心依赖
- 2、Java中创建对象的方法
- 3、使用spring创建对象
- 4、spring创建对象顺序
- 5、spring的两大核心技术
一、Maven
1、什么是maven
管理项目的构建,报告和文档的项目管理工具软件。将程序中要使用的jar包存在放在maven仓库中,只需要在pom.xml文档中进行配置,就可以联网获得对应的jar包,而且会将所导入的jar包的所有依赖的jar包一起导入进去。
可以简单的理解为就是一个管理项目,管理依赖的工具
2、Maven核心功能
- 依赖管理
- 模块管理
- 插件管理
- 部署管理
3、Maven生命周期
maven将工程的构建过程理解为不同的生命周期和阶段, 一个工程的构建过程中,存在着不同的生命周期,生命周期间互相独立,没有一定的顺序关系。 每个生命周期又划分为不同的阶段,不同的阶段之间有明确的顺序关系, 同一生命周期内的阶段必须按顺序依次执行。
-
clear(清除)
- pre-clean:执行清理的准备工作
- clean:执行清理工作
- post-clean:执行清理后的后续工作
-
default(核心)
- validate:验证项目的正确性及项目所必需的信息是否可用
- compile:编译项目中代码
- test:用相关的单元测试框架测试编译后的代码,测试代码并不会随项目打包和布署
- package:将编译后的代码打包成相应的格式文件,如jar包
- integration-test: 如果需要在一个综合环境中运行我们的测试,这个阶段将会运行和布署项目到该环境中
- verify: 检查项目中的包是否正确与符合要求
- install:将包安装到本地maven仓库,其他项目也可以使用该包作为依赖
- deploy:将包发布到远程的maven仓库,并提供给其他开发者使用
-
site(建立发布项目站点)
- pre-site:准备生成
- site:生成项目站点和文档
- post-site:执行生成文档后的后续工作
- site-deploy:发布项目文档
二、Spring
1、Spring的Maven仓库核心依赖
springcore4.3.18
<!-- .springframework/spring-core -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.18.RELEASE</version>
</dependency>springcontext
<!-- .springframework/spring-context -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.18.RELEASE</version>
</dependency>
2、Java中创建对象的方法
-
new关键字
-
克隆,重写clone()方法
实体类实现Cloneable接口,重写clone()方法,调用clone()方法,克隆得到的对象与原来的对象不是一个对象
-
反射
得到Students类的Class对象,根据Class对象得到构造器,再根据构造器得到对象
-
对象反序列化
实体类实现Serializable接口,先序列化将对象写入文件中,再反序列化从文件中得到对象,记得关闭流
Students类
//Students类
package org.westos.domain;import java.io.Serializable;public class Students implements Cloneable, Serializable {private String sid;private String sname;private String gender;private String birthday;private String major;//实现Cloneable接口,重写父类的clone()方法@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}@Overridepublic String toString() {return "Students{" +"sid='" + sid + '\'' +", sname='" + sname + '\'' +", gender='" + gender + '\'' +", birthday='" + birthday + '\'' +", major='" + major + '\'' +'}';}public Students() {}public Students(String sid, String sname, String gender, String birthday, String major) {this.sid = sid;this.sname = sname;this.gender = gender;this.birthday = birthday;this.major = major;}public String getSid() {return sid;}public void setSid(String sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}
}
测试类
package org.westos.test;import org.westos.domain.Students;import java.io.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;public class Test {public static void main(String[] args) throws CloneNotSupportedException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, IOException, InvocationTargetException {//1.使用new关键字创建对象Students s1 = new Students("001", "张三", "男", "1993-02-03", "古文");System.out.println("s1:" + s1);//2.使用clone()方法创建对象Students s2 = (Students) s1.clone();System.out.println("s2:" + s2);System.out.println(s1 == s2);//s1与s2不相等//3.使用反射得到对象Class aClass = Class.forName("org.westos.domain.Students");//使用类名得到类的Class对象//使用构造器的参数得到构造器Constructor constructor = aClass.getConstructor(String.class, String.class, String.class, String.class, String.class);//使用构造器得到对象Students s3 = (Students) constructor.newInstance(new Object[]{"002", "李四", "男", "1994-02-04", "高数"});System.out.println("s3:" + s3);//4.使用反序列化得到对象//得到对象输出流File file = new File("studentLists.text");ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));//将对象序列化写到文件studentLists.txt中out.writeObject(s2);//得到对象输入流ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));//反序列化读取对象Students s4 = (Students) in.readObject();System.out.println("s4:" + s4);//关闭流资源in.close();out.close();}
}
3、使用spring创建对象
-
spring也不适用new关键字创建对象,使用Ioc容器注入
-
先在xml配置文档里配置好对象的属性与id值,得到与配置文档的连接,根据配置文档里id属性的值,得到对象(内部也是通过反射+xml文档的解析实现的)
-
对象的创建是通过默认无参构造创建的,而属性的初始化时使用set方法初始化的,所以一定要保留默认的无参构造和set方法
测试类
public class IocDemo2 {public static void main(String[] args) {//使用Spring的ioc拿到对象//得到context对象ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//得到Students对象Students s1 = (Students) context.getBean("s1");System.out.println(s1);} }
applicationContext.xml文档
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns=""xmlns:xsi=""xsi:schemaLocation=" .xsd"><!--定义学生对象--><bean id="s1" class="org.westos.domain.Students"><property name="sid" value="200"/><property name="sname" value="张三丰"/><property name="gender" value="男"/><property name="birthday" value="1998-10-10"/><property name="major" value="太极拳"/></bean> </beans>
4、spring创建对象顺序
- 加载applicationContext.xml文档
- 解析对应的id的对象
- 通过反射区调用默认无参构造
- 使用set方法初始化属性
5、spring的两大核心技术
-
IOC(DI),控制反转/依赖注入
如何理解依赖注入
-
创建对象,不适用new关键字
-
面向接口的编程,UsbInterface接口、Computer类、IocDemo3类
不修改代码,使用多态的形式,用IOC在配置文档中读取对象,修改配置文档
什么是IOC容器:xml文档中的beans标签就是一个IOC容器
为什么不推荐使用new创建对象
- 麻烦,可以直接在配置文档里面配置好,然后用的时候直接根据id属性获取对象就行了
-
-
AOP,面向切面的编程
- 可以简单的理解为在不改变原有程序的基础上为代码增加新的功能
2. 分为前置增强、后置增强、最终增强、异常增强、环绕增强
3. 需要在原有的类上定义一个切口(方法),然后定义一个用于增强的AOP类,可以在类中定义增强的方法。最后在xml配置文档中进行配置
- 可以简单的理解为在不改变原有程序的基础上为代码增加新的功能
发布评论