写点什么

史上最全 Spring 教程,从零开始带你深入♂学习(二 (1),深入实践 springbootpdf 百度云

用户头像
极客good
关注
发布于: 刚刚

[](

)7、Null 注入


<property name="wife"><null/></property>

[](

)8、Properties 注入


<property name="info">


<props>


<prop key="学号">20190604</prop>


<prop key="性别">男</prop>


<prop key="姓名">小明</prop>


</props>


</property>


[领取资料](


)

[](

)完整版


<?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="student" class="com.study.pojo.Student">


<property name="name" value="小明"/>


</bean>-->


<bean id="address" class="com.study.pojo.Address">


<property name="address" value="广西"/>


</bean>


<bean id="student" class="com.study.pojo.Student">


<property name="name" value="张三"/>


<property name="address" ref="address"/>


<property name="books">


<array>//加群 1025684353 一起吹水聊天


<value>红楼梦</value>


<value>西游记</value>


<value>水浒传</value>


<value>三国演义</value>


</array>


</property>


<prope


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


rty name="hobbys">


<list>


<value>唱</value>


<value>跳</value>


<value>rep</value>


<value>篮球</value>


</list>


</property>


<property name="card">


<map>


<entry key="身份证" value="123"/>


<entry key="学生证" value="456"/>


</map>


</property>


<property name="games">


<set>


<value>LOL</value>


<value>COC</value>


<value>BOB</value>


</set>


</property>


<property name="wife">


<null/>


</property>


<property name="info">


<props>//加群 1025684353 一起吹水聊天


<prop key="学号">456</prop>


<prop key="username">张三</prop>


<prop key="password">123456</prop>


</props>


</property>


</bean>


</beans>


[](


)二、编写测试类


[领取资料](


)


import com.study.pojo.Student;


import com.study.pojo.User;


import org.junit.Test;


import org.springframework.context.ApplicationContext;


import org.springframework.context.support.ClassPathXmlApplicationContext;


public class MyTest {


public static void main(String[] args) {


ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");


Student student = context.getBean("student", Student.class);


System.out.println(student.toString()


);


}


[](


)三、打印结果


[



](


)


[



](


)


[



](


)


[](


)拓展注入实现


=====================================================================


[](


)一、编写实体类: 【注意:这里没有有参构造器!】


package com.study.pojo;


public class User {


private String name;


private int age;


public void setName(String name) {


this.name = name;


}


public void setAge(int age) {


this.age = age;


}


@Override


public String toString() {


return "User{" +


"name='" + name + ''' +


", age=" + age +


'}';


}


}


[领取资料](


)


[](


)二、编写 spring 配置文件【userbeans.xml】


1、P 命名空间注入 : 需要在头文件中假如约束文件


**导入约束 : xmlns:p=“[http://www.springframework.org/schema/p](


)”


<bean id="user" class="com.study.pojo.User" p:name="张三" p:age="18"/>


2、c 命名空间注入 : 需要在头文件中假如约束文件


**导入约束 : xmlns:c=“[http://www.springframework.org/schema/c](


)”


<bean id="user" class="com.study.pojo.User" c:name="李四" c:age="18"/>


[



](


)


[](


)三、编写测试类


@Test


public void test2(){


ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");


User user = context.getBean("user2", User.class);


System.out.println(user);//加群 1025684353 一起吹水聊天


}


[](


)测试结果:


[领取资料](


)


[



](


)


[](


)Bean 的作用域


=======================================================================


在 Spring 中,那些组成应用程序的主体及由 Spring IoC 容器所管理的对象,被称之为 bean。简单地讲,bean 就是由 IoC 容器初始化、装配及管理的对象.


| 类别 | 说明 |


| --- | --- |


| singleton | 在 Spring IOC 容器中仅存在一个 Bean 实例(单例),Bean 以单例方式存在,默认值 |


| prototype | 每次从容器中调用 Bean 时,都返回一个新的实例,即每次调用 getBean 时,相当于执行 new XxxBean() |


| request | 每次 HTTP 请求都会创建一个新的 Bean,该作用域仅适用于 WebApplicationContext 环境 |


| seesion | 同一个 HTTP Session 共享一个 Bean,不同 Session 使用不同 Bean,仅适用于 WebAppcationContext 环境 |


几种作用域中,request、session 作用域仅在基于 web 的应用中使用(不必关心你所采用的是什么 web 应用框架),只能用在基于 web 的 Spring ApplicationContext 环境。


[领取资料](


)


[](


)1、Singleton


当一个 bean 的作用域为 Singleton,那么 Spring IoC 容器中只会存在一个共享的 bean 实例(单例),并且所有对 bean 的请求,只要 id 与该 bean 定义相匹配,则只会返回 bean 的同一实例。


<bean id="ServiceImpl" class="cn.csdn.service.ServiceImpl" scope="singleton">


[](


)2、 Prototype


当一个 bean 的作用域为 Prototype,表示一个 bean 定义对应多个对象实例。


<bean id="account" class="com.foo.DefaultAccount" scope="prototype"/>


或者


<bean id="account" class="com.foo.DefaultAccount" singleton="false"/>


[](


)3、Request


当一个 bean 的作用域为 Request,表示在一次 HTTP 请求中,一个 bean 定义对应一个实例;即每个 HTTP 请求都会有各自的 bean 实例,它们依据某个 bean 定义创建而成。


<bean id="loginAction" class=cn.csdn.LoginAction" scope="request"/>


[](


)4、Session


当一个 bean 的作用域为 Session,表示在一个 HTTP Session 中,一个 bean 定义对应一个实例。


<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>


[](


)Bean 的自动装配


========================================================================


[领取资料](


)


**自动装配是使用 spring 满足 bean 依赖的一种方法


spring 会在应用上下文中为某个 bean 寻找其依赖的 bean。**


Spring 的自动装配需要从两个角度来实现,或者说是两个操作:


  1. 组件扫描(component scanning):spring 会自动发现应用上下文中所创建的 bean;

  2. 自动装配(autowiring):spring 自动满足 bean 之间的依赖,也就是我们说的 IoC/DI;


推荐不使用自动装配 xml 配置 , 而使用注解。


[](


)环境搭建


1、新建两个实体类,Cat Dog 都有一个叫的方法


package com.study.pojo;


public class Cat {


public void shout(){//加群 1025684353 一起吹水聊天


System.out.println("miao~");


}


}


package com.study.pojo;


public class Dog {


public void shout(){


System.out.println("wang~");


}


}


2、新建一个用户类 User


package com.study.pojo;


public class People {


private Cat cat;


private Dog dog;


private String name;


}


3、 编写 Spring 配置文件


<?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="dog" class="com.study.pojo.Dog"/>


<bean id="cat" class="com.study.pojo.Cat"/>


<bean id="user" class="com.study.pojo.User">


<property name="cat" ref="cat"/>//加群 1025684353 一起吹水聊天


<property name="dog" ref="dog"/>


<property name="str" value="zhangsan"/>


</bean>


</beans>


[领取资料](


)


4、测试


public class MyTest {


@Test


public void testMethodAutowire() {


ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");


User user = (User) context.getBean("user");//加群 1025684353 一起吹水聊天


user.getCat().shout();


user.getDog().shout();


}


}


5、打印结果


[



](


)


一、byName


autowire byName (按名称自动装配)


修改 bean 配置,增加一个属性 autowire=“byName”


<bean id="user" class="com.study.pojo.User" autowire="byName">


<property name="str" value="zhangsan"/>


</bean>


二、byType


autowire byType (按类型自动装配)


将 user 的 bean 配置修改一下 : autowire=“byType”


<bean id="user" class="com.kuang.pojo.User" autowire="byType">


<property name="str" value="qinjiang"/>


</bean>


[领取资料](


)


三、使用注解


1. 在 spring 配置文件中引入 context 文件头


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


http://www.springframework.org/schema/context


http://www.springframework.org/schema/context/spring-context.xsd


2. 开启属性注解支持!


context:annotation-config/



(一)@Autowired


**@Autowired 是按类型自动转配的,不支持 id 匹配。


需要导入 spring-aop 的包!**


1. 将 User 类中的 set 方法去掉,使用 @Autowired 注解


public class User {


@Autowired


private Cat cat;


@Autowired


private Dog dog;


private String str;


public Cat getCat() {


return cat;


}//加群 1025684353 一起吹水聊天


public Dog getDog() {


return dog;


}


public String getStr() {


return str;


}


}


2. 此时配置文件内容


领取资料


<bean id="dog" class="com.study.pojo.Dog"/>


<bean id="cat" class="com.study.pojo.Cat"/>


<bean id="user" class="com.study.pojo.User"/>


注意:


//如果允许对象为 null,设置 required = false,默认为 true


@Autowired(required = false)


private Cat cat;


(二)@Qualifier


**@Autowired 是根据类型自动装配的,加上 @Qualifier 则可以根据 byName 的方式自动装配


@Qualifier 不能单独使用。**


1. 配置文件修改内容,保证类型存在对象。且名字不为类的默认名字!

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
史上最全Spring教程,从零开始带你深入♂学习(二(1),深入实践springbootpdf百度云