Spring学习笔记01

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的优势有哪些?

  1. 方便解耦,简化开发
  2. AOP 编程的支持
  3. 声明式事务的支持
  4. 方便程序的测试
  5. 方便集成各种优秀框架
  6. 降低 JavaEE API 的使用难度
  7. 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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值