Spring框架在Bean中的管理(第十课)

简介: Spring框架在Bean中的管理(第十课)

         

Spring框架在Bean中的管理(第十课)案例实操 了解SpringIoc第一种注入的方式 这里从java基础开始说起

利用的技术有:Java的面向对象+SpringIoc第一种方式的注入+Maven项目依赖的构建 不需要写配置文件的方式。

第一步:导入必要的Maven的坐标 在Pom.xml文件中:这里推荐一个网站 下面的网站用来查找maven的坐标用的

https://mvnrepository.com/search?q=Spring

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.22</version>
</dependency>

第二部分:回忆一下Java是如何创建对象的呢! 首先要有一个类 在这个类中 要有无参 有参 set get tostring 方法 来完成一个标准的类

public class Student {
    private String name;
    private int age;
    /*非正常的数据类型*/
    private Date birthday;
}
//这个类中的set和get方法自己去写

然后测试类:运行结果如下所示

 @Test
    public void one() {
        //创建对象1
        Student student1 = new Student();
        //存放地址编码
        System.out.println("java代码中创建对象1Student student1 = new Student();");
        System.out.println(student1);
        //创建对象2
        Student student2 = new Student();
        //存放地址编码
        System.out.println("java代码中创建对象2Student student1 = new Student();");
        System.out.println(student2);
        //创建对象3
        Student student3 = new Student();
        System.out.println("java代码中创建对象3Student student1 = new Student();");
        System.out.println(student3);
        Date date = new Date();
        System.out.println("java代码中创建 Date date=new Date() 对象");
        System.out.println(date);
    }

上面的运行结果 观察发现上面创建的三个对象中 Student student1 = new Student(); 这行代码


思考一下 能不能不用 new 关键字创建对象呀!答案是有的  在框架中:

在applicationContext.xml文件中如何创建对象的呢 关于Bean来管理

观察下面的案例

<!-- 下面代码等价于Student student1 = new Student();-->
    <!--scope属性的学习-->
    <!--scope="prototype" 创建多个对象 创建多个空间
     singleton 创建单个对象的遍历  创建单个空间  -->
    <bean id="Student" class="com.Sping.Entily.Student" scope="prototype"></bean>
 @Test
    public void two() {
        //加载文件配置信息的文件将rescure文件夹下的applicationContext.xml文件导入其中
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
  //强制转换类型
        Student student = (Student) ac.getBean("Student");
        System.out.println("Spring文件创建对象1");
        System.out.println(student);
//        Studenta
        Student studenta = (Student) ac.getBean("Student");
        System.out.println("Spring文件创建对象2");
        System.out.println(studenta);
//        Sping 框架中同一对象Ip地址  从Sping 框架中默认为单利模式 在同一块空间中
        Date date = new Date();

Student student = (Student) ac.getBean("Student");

得出结论一:id="Student" 要和getBean("Student"); 一致


第三部分:回忆一下Java是如何给对象赋值的呢! Java是这样做的  利用Set去赋值 利用get去取出值。

/*面向对象中如何用java代码进行赋值的呢?*/
    @Test
    public void two() {
        Student student = new Student();
        student.setName("我是利用Java创建出来的对象");
        student.setAge(2022);
        System.out.println(student.getName() + "=====" + student.getAge());
        System.out.println("--------------------------------------------------");
        Dog dao2 = new Dog();
        dao2.setAge(67);
        dao2.setName("我是第二只狗JAVA创建的对象哦哦哦");
        System.out.println("狗的年龄为"+dao2.getAge()+dao2.getName());
    }

Java对象取出值的结果

思考一下 能不能不用 set属性 关键字创建对象呀!答案是有的  在框架中:

<!--  Sping框架的方式给对象赋值-->
    <!--  <property name="K" value="V"></property> 一个属性对应一个值 -->
    <bean id="stu" class="com.Sping.Entily.Student">
        <!--Sping方式的赋值-->
        <property name="name" value="小王"></property>
        <property name="age" value="12"></property>
    </bean>
 <bean id="dog" class="com.Sping.Entily.Dog">
        <property name="name" value="小黑"></property>
        <property name="age" value="45"></property>
    </bean>
<bean id="dog" class="com.Sping.Entily.Dog">
    <property name="属性" value="值"></property> 在Bean里面写了一个标签property
</bean>
 @Test
    public void three() {
        /*Sping方式的赋值 第一步加载配置文件*/
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student stu = ac.getBean("stu", Student.class);
        System.out.println("利用Spring文件赋值");
        System.out.println(stu.getName() + "-----------" + stu.getAge());
        Dog dog = ac.getBean("dog", Dog.class);
        System.out.println("姓名为"+dog.getName()+"年龄为"+dog.getAge());
    }

这又是结果

第四部分:回忆一下Java是如何间接获得对象的呢 Java是这样做的?

public class Dog {
    private String name;
    private int age;
    /*非正常的数据类型*/
    private Date birthday;
    public Dog() {
    }
public class School {
    /*学校类*/
    public Student geStudent(){
        return new Student();
    }
    public  Dog getDao(){
        return  new Dog();
    }
    public static  Student getStudent1(){
        return  new Student();
    }
}
  @Test
    public  void three(){
        /*java代码的方式*/
        School school=new School();
        Student student=school.geStudent();
        System.out.println("java代码的方式获得"+student);
        System.out.println("----------------------------------------------------")
    }

School school=new School();

Student student=school.geStudent(); 思考一下Spring框架如何做呢?

 <!--间接方式获得-->
    <bean id="school" class="com.Sping.Entily.School"></bean>
    <bean id="student" factory-bean="school" factory-method="geStudent">
        <property name="name" value="我是间接方式获得的"></property>
        <property name="age" value="89"></property>
    </bean>
 ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        Student s=ac.getBean("student",Student.class);
        System.out.println(s.getName()+"======"+s.getAge());

间接方式的获取运行结果

第五部分:Spring框架Ioc 静态方式获得

<!--  案例四/*静态方式获得*/-->
    <bean id="student1" class="com.Sping.Entily.School" factory-method="getStudent1">
        <property name="name" value="我是静态static"></property>
        <property name="age" value="12"></property>
    </bean>
 /*静态方式获得*/
    @Test
    public void four(){
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        Student student1=ac.getBean("student1",Student.class);
        System.out.println(student1.getName()+"----------"+student1.getAge());
    }

运行结果

Spring框架在Bean中的管理(第十一课)_星辰镜的博客-CSDN博客

相关文章
|
1月前
|
XML 安全 Java
|
12天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
7天前
|
Java 开发者 Spring
理解和解决Spring框架中的事务自调用问题
事务自调用问题是由于 Spring AOP 代理机制引起的,当方法在同一个类内部自调用时,事务注解将失效。通过使用代理对象调用、将事务逻辑分离到不同类中或使用 AspectJ 模式,可以有效解决这一问题。理解和解决这一问题,对于保证 Spring 应用中的事务管理正确性至关重要。掌握这些技巧,可以提高开发效率和代码的健壮性。
34 13
|
10天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
10天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
16天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
53 6
|
19天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
37 5
|
18天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
80 3
|
30天前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
64 8
|
1月前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
34 1