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()); }
运行结果