史上最全 Spring 教程,从零开始带你深入♂学习(二,java 快速排序原理
[领取资料](
)
[](
)完整版
<?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>
<property 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 的自动装配需要从两个角度来实现,或者说是两个操作:
组件扫描(component scanning):spring 会自动发现应用上下文中所创建的 bean;
自动装配(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. 开启属性注解支持!
(一)@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. 配置文件修改内容,保证类型存在对象。且名字不为类的默认名字!
<bean id="dog1" class="com.study.pojo.Dog"/>
<bean id="dog2" class="com.study.pojo.Dog"/>
<bean id="cat1" class="com.study.pojo.Cat"/>
<bean id="cat2" class="com.study.pojo.Cat"/>
2. 没有加 Qualifier 测试,直接报错
3. 在属性上添加 Qualifier 注解
@Autowired
@Qualifier(value = "cat2")
private Cat cat;
@Autowired
@Qualifier(value = "dog2")
private Dog dog;
评论