【Spring】Sring基础概念(黑马SSM学习笔记)2

简介: 【Spring】Sring基础概念(黑马SSM学习笔记)

bean实例化的三种方式


  • 无参构造方法实例化
  • 工厂静态方法实例化
  • 工厂实例方法实例化

工厂静态方法化

w3.png

package cc.mllt.dao.factory;
import cc.mllt.dao.UserDao;
import cc.mllt.dao.impl.UserDaoImpl;
public class StaticFactory {
    public  static UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

发现包放的有问题,更改一下路径

w1.png

q6.png

q5.png

q4.png

更改配置文件ApplicationContext.xml

<?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="cc.mllt.dao.impl.UserDaoImpl" scope="singleton" init-method="ml_init" destroy-method="ml_destroy"/>-->
<!--    静态工厂构造-->
    <bean id="userDao" class="cc.mllt.factory.StaticFactory" factory-method="getUserDao" />
</beans>

q3.png

工厂实例方法实例化

q2.png

package cc.mllt.factory;
import cc.mllt.dao.UserDao;
import cc.mllt.dao.impl.UserDaoImpl;
public class DynamicFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

配置文件ApplicationContext.xml

<?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="cc.mllt.dao.impl.UserDaoImpl" scope="singleton" init-method="ml_init" destroy-method="ml_destroy"/>-->
<!--    静态工厂构造-->
<!--    <bean id="userDao" class="cc.mllt.factory.StaticFactory" factory-method="getUserDao" />-->
<!--    工厂实例实例化(动态工厂)-->
    <bean id="factory" class="cc.mllt.factory.DynamicFactory"></bean>
    <bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>
</beans>

测试

q1.png

Spring配置文件


Bean的依赖注入分析

w4.png

q3.png

w2.png

package cc.mllt.service.ipml;
import cc.mllt.dao.UserDao;
import cc.mllt.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserServiceImpl implements UserService {
    @Override
    public void save() {
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) app.getBean("userDao");
        userDao.save();
    }
}

w1.png

q6.png

package cc.mllt.demo;
import cc.mllt.service.UserService;
import cc.mllt.service.ipml.UserServiceImpl;
public class UserController {
    public static void main(String[] args) {
        UserService userService = new UserServiceImpl();
        userService.save();
    }
}

q5.png

现在

q4.png

这是由于还没有去修改配置未见ApplicationContext.xml

q3.png

q2.png

UserDao此时在UserService内部

Bean依赖注入概念

依赖注入(Dependency Injection):Spring框架核心IOC的具体实现

IOC解耦只是降低了他们的依赖关系,但不会消除。例如:业务层仍然会调用持久层的方法

Bean的依赖注入方式

set方法

q1.png

w3.png

w2.png

w1.png

q6.png

p命名空间注入的本质也是set方法注入,但是比起上述的set方法注入更加方便,主要体现在配置文件中

(1)引入p命名空间:

xmlns:p="http://www.springframework.org/schema/p"

(2)修改注入方法

<bean id="userService" class="cc.mllt.service.ipml.UserServiceImpl" p:userDao-ref="userDao"></bean>

q5.png

q4.png

构造方法

<?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="cc.mllt.dao.impl.UserDaoImpl" scope="singleton" init-method="ml_init" destroy-method="ml_destroy"/>-->
<!--    静态工厂构造-->
<!--    <bean id="userDao" class="cc.mllt.factory.StaticFactory" factory-method="getUserDao" />-->
<!--    工厂实例实例化(动态工厂)-->
<!--    <bean id="factory" class="cc.mllt.factory.DynamicFactory"></bean>-->
<!--    <bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>-->
<!--    service-->
<!--    set构造方法-->
<!--    <bean id="userDao" class="cc.mllt.dao.impl.UserDaoImpl"></bean>-->
<!--    <bean id="userService" class="cc.mllt.service.ipml.UserServiceImpl">-->
<!--        <property name="userDao" ref="userDao"></property>-->
<!--    </bean>-->
<!--        <bean id="userService" class="cc.mllt.service.ipml.UserServiceImpl" p:userDao-ref="userDao"></bean>-->
<!--构造方法-->
    <bean id="userDao" class="cc.mllt.dao.impl.UserDaoImpl"></bean>
        <bean id="userService" class="cc.mllt.service.ipml.UserServiceImpl">
           <constructor-arg name="userDao" ref="userDao"></constructor-arg>
        </bean>
</beans>

q3.png

package cc.mllt.service.ipml;
import cc.mllt.dao.UserDao;
import cc.mllt.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserServiceImpl implements UserService {
    private UserDao userDao;
    public UserServiceImpl(UserDao userDao){
        this.userDao = userDao;
    }
    public UserServiceImpl(){
    }
//    private UserDao userDao;
//    public void  setUserDao(UserDao userDao){
//        this.userDao = userDao;
//    }
    @Override
    public void save() {
//        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//        UserDao userDao = (UserDao) app.getBean("userDao");
        userDao.save();
    }
}

q2.png

运行

q1.png


相关文章
|
17天前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
41 9
|
1月前
|
前端开发 Java 数据库
SpringBoot学习
【10月更文挑战第7天】Spring学习
36 9
|
1月前
|
XML Java 数据格式
Spring学习
【10月更文挑战第6天】Spring学习
21 1
|
1月前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
68 2
|
1月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
111 1
|
1月前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
28 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
1月前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
27 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
98 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
29 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
1月前
|
Java 测试技术 Spring
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
这篇文章介绍了Spring Boot中配置文件的语法、如何读取配置文件以及如何通过静态工具类读取配置文件。
61 0
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
下一篇
无影云桌面