maven工程的环境搭建
首先去官网下载maven 压缩包 解压到本地随便一个路径
在系统环境变量中添加maven的路径 如 D:\code\ku\apache-maven-3.6.3\bin
然后再控制台上面确认是否添加成功 输入命令 mvn -v 如果出现如图的情况 表示安装成功
配置setting.xml
设定自己的 本地仓库路径
用文本打开D:\code\ku\apache-maven-3.6.3\conf\setting.xml
插入一行 D:\code\ku\maven_repository
配置阿里云中央仓库 下载快一些
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
在idea 中配置maven
在 ieda 创建 maven工程步骤
这样就创建一个简单的maven web工程
Spring简介
Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架
Spring的两大核心:
IOC(Inverse Of Control:反转控制)
AOP(Aspect Oriented Programming:面向切面编程)
Spring的优势有哪些?
- 方便解耦,简化开发
- AOP 编程的支持
- 声明式事务的支持
- 方便程序的测试
- 方便集成各种优秀框架
- 降低 JavaEE API 的使用难度
- Java 源码是经典学习范例
springIOC步骤是什么?
快速入门代码
- 导入 Spring 开发的基本包坐标
在pom.xml中 加入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lovelves</groupId>
<artifactId>springMaven</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
- 编写 Dao 接口和实现类
//dao接口
package com.lovelves.Dao;
public interface UserDao {
public void save();
}
//dao实现
package com.lovelves.Dao.impl;
import com.lovelves.Dao.UserDao;
public class UserDaoimp implements UserDao {
public UserDaoimp(){
System.out.println("我被创建出来了");
}
public void init(){
System.out.println("初始化");
}
public void destory(){
System.out.println("销毁了");
}
@Override
public void save() {
System.out.println("save方法执行了");
}
}
- 创建 Spring 核心配置文件
- 在 Spring 配置文件中配置 UserDaoImpl
在resources 中创建sping的配置 文件 名字可随便起
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userdao" class="com.lovelves.Dao.impl.UserDaoimp" scope="singleton" init-method="init" destroy-method="destory"></bean>
</beans>
- 使用 Spring 的 API 获得 Bean 实例
package com.lovelves.demo;
import com.lovelves.Dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserDaoDemo {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("ap.xml");
UserDao us = (UserDao) app.getBean("userdao");
us.save();
}
}
快速入门 详解 bean
bean的详细信息
基本属性
id:Bean实例在Spring容器中的唯一标识
class:Bean的全限定名称
scope:指对象的作用范围,取值如下:
singleton:默认值,单例的
prototype:多例的
request: WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中
session:WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中
global session: WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那globalSession相当于 session
1、当scope的取值为singleton时,bean对象何时被实例化?
当scope的取值为singleton时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
对象创建:当应用加载,创建容器时,对象就被创建了
对象运行:只要容器在,对象一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
2、当scope的取值为prototype时,bean对象何时被实例化?
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用中,就一直活着
对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
Bean生命周期配置
init-method:指定类中的初始化方法名称
destroy-method:指定类中销毁方法名称
Bean实例化三种方式
- 无参构造方法实例化(重点掌握) 前面实现的一种
- 工厂静态方法实例化(理解)
创建一个静态的工厂方法
package com.lovelves;
import com.lovelves.Dao.UserDao;
import com.lovelves.Dao.impl.UserDaoimp;
public class StaticFactoryDao {
public static UserDao getDao(){
return new UserDaoimp();
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- <bean id="userdao" class="com.lovelves.Dao.impl.UserDaoimp" scope="singleton" init-method="init" destroy-method="destory"></bean>-->
<bean id="userdao" class="com.lovelves.StaticFactoryDao" factory-method="getDao"></bean>
</beans>
- 工厂实例方法实例化(理解)
创建 一个动态 的工厂方法
package com.lovelves;
import com.lovelves.Dao.UserDao;
import com.lovelves.Dao.impl.UserDaoimp;
public class StaticFactoryDao {
public static UserDao getDao(){
return new UserDaoimp();
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- <bean id="userdao" class="com.lovelves.Dao.impl.UserDaoimp" scope="singleton" init-method="init" destroy-method="destory"></bean>-->
<!-- <bean id="userdao" class="com.lovelves.StaticFactoryDao" factory-method="getDao"></bean>-->
<bean id="factoy" class="com.lovelves.DymicFactry"></bean>
<bean id="userdao" factory-bean="factoy" factory-method="getDao"></bean>
</beans>
依赖注入
Bean的依赖注入方式
- 构造方法
service中的构造方法
package com.lovelves.Service.impl;
import com.lovelves.Dao.UserDao;
import com.lovelves.Service.UserServiceDao;
public class UserServiceDaoimpl implements UserServiceDao {
private UserDao dao;
public UserServiceDaoimpl(UserDao dao) {
this.dao = dao;
}
public UserServiceDaoimpl() {
}
@Override
public void save() {
dao.save();
}
}
配置文件
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userdao" class="com.lovelves.Dao.impl.UserDaoimp"></bean>
<bean id="userservic" class="com.lovelves.Service.impl.UserServiceDaoimpl">
<constructor-arg name="dao" ref="userdao"></constructor-arg>
</bean>
</beans>
测试方法
package com.lovelves.test;
import com.lovelves.Dao.UserDao;
import com.lovelves.Service.UserServiceDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
@Test
public void test1(){
//如果配置文件中 scope="prototype 多例 应用的时候才会创建实例 如果 是单例的话 执行下面一行就会创建
ApplicationContext app = new ClassPathXmlApplicationContext("ap.xml");
UserServiceDao ser = (UserServiceDao) app.getBean("userservic");
ser.save();
}
}
- set方法
service 方法调用dao
package com.lovelves.Service.impl;
import com.lovelves.Dao.UserDao;
import com.lovelves.Service.UserServiceDao;
public class UserServiceDaoimpl implements UserServiceDao {
private UserDao dao;
public void setDao(UserDao dao) {
this.dao = dao;
}
@Override
public void save() {
dao.save();
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userdao" class="com.lovelves.Dao.impl.UserDaoimp"></bean>
<bean id="userservic" class="com.lovelves.Service.impl.UserServiceDaoimpl">
<property name="dao" ref="userdao"></property>
</bean>
</beans>
测试
package com.lovelves.test;
import com.lovelves.Dao.UserDao;
import com.lovelves.Service.UserServiceDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
@Test
public void test1(){
//如果配置文件中 scope="prototype 多例 应用的时候才会创建实例 如果 是单例的话 执行下面一行就会创建
ApplicationContext app = new ClassPathXmlApplicationContext("ap.xml");
UserServiceDao ser = (UserServiceDao) app.getBean("userservic");
ser.save();
}
}
配置文件 简单形式 p命名空间
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userdao" class="com.lovelves.Dao.impl.UserDaoimp"></bean>
<bean id="userservic" class="com.lovelves.Service.impl.UserServiceDaoimpl" p:dao-ref="userdao"/>
</beans>
注入普通数据
public class UserServiceDaoimpl implements UserServiceDao {
private UserDao dao;
private int age;
private String name;
配置文件
<bean id="userservic" class="com.lovelves.Service.impl.UserServiceDaoimpl">
<!-- 配置普通属性-->
<property name="age" value="15"/>
<property name="name" value="hello"/>
</beans>
注入复杂数据
public class UserServiceDaoimpl implements UserServiceDao {
private List<String> s1;
private Map<String, User> m1;
private Properties p1;
配置文件
<bean id="userdao" class="com.lovelves.Dao.impl.UserDaoimp"></bean>
<bean id="userservic" class="com.lovelves.Service.impl.UserServiceDaoimpl">
<!-- 配置列表 map 等复杂数据-->
<property name="m1">
<map>
<entry key="u1" value-ref="user"/>
<entry key="u2" value-ref="user1"/>
</map>
</property>
<!-- 配置列表 property 等复杂数据-->
<property name="p1">
<props>
<prop key="pp">aaaaa</prop>
<prop key="ppp">dddddddd</prop>
</props>
</property>
<!-- 配置列表 list 等复杂数据-->
<property name="s1">
<list>
<value>helooo</value>
<value>dkfjldsjfls</value>
</list>
</property>
</bean>
<bean id="user" class="com.lovelves.domain.User">
<property name="name" value="s1"/>
<property name="addr" value="china"/>
</bean>
<bean id="user1" class="com.lovelves.domain.User">
<property name="name" value="s2"/>
<property name="addr" value="japan"/>
</bean>
导入其他的配置文件
<import resource="ap1.xml"/>
spring 相关api
通过class文件 来获取bean 但这种方法有个弊端 就是配置文件出现两个或两个以上的一个类型的bean 通过这中方法获取会报错
UserServiceDao ser = app.getBean(UserServiceDaoimpl.class);