Spring学习大纲
1.spring的基础配置
- xml注入的时候,value的值是给构造函数,创建时候的,并不是指定的一个name变量给它赋值
- getBean ,Bean标签可以多别名
- import,用来合并xml配置(一般用于团队,每个人开发不同类需要一起配置时候)
将其余的xml配置文件
集合到一个xml中
2.set注入
1.普通注入
2.bean注入
3.集合注入
4.list注入
5.map注入
6.set注入
7.空注入
8.props注入(infomation)
<?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注入 <-->
<bean id="address" class="com.Ethan.pojo.Address">
<property name="address" value="贵安"/>
</bean>
<bean id="student" class="com.Ethan.pojo.Student">
<!-->普通注入 <-->
<property name="name" value="小俊"/>
<!-->Bean注入 <-->
<property name="address" ref="address"/>
<!-->array数组注入 <-->
<property name="book">
<array>
<value>c plus plus</value>
<value>java</value>
<value>python</value>
</array>
</property>
<!-->list集合注入 <-->
<property name="hobbys">
<list>
<value>唱</value>
<value>跳</value>
<value>rap</value>
<value>篮球</value>
</list>
</property>
<!-->Map集合注入 <-->
<property name="card">
<map>
<entry key="身份证" value="333333444444555555"/>
<entry key="银行卡" value="999999999999999999"/>
</map>
</property>
<!-->set注入 <-->
<property name="game">
<set>
<value>DOTA</value>
<value>LOL</value>
<value>CF</value>
</set>
</property>
<!-->空注入 <-->
<property name="wife">
<null/>
</property>
<!-->property注入 <-->
<property name="info">
<props>
<prop key="学号"> 202105100</prop>
<prop key="姓名">小俊</prop>
<prop key="sex">man</prop>
</props>
</property>
</bean>
</beans>
2.1.p命名注入和c命名注入
在xml配置文件中引入命名规则
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
我很奇怪的一点是:我明明在我的idea中引入了两条规则,并且在setting里设置了URL。但是还是不能使用。但这两个注入规则不作为学习的重点。
3.Junit
测试@Test
后续有时间再返回来详细讲解这个Junit,只要记得它的用法就可以了。
4.Bean的作用域
下面列出一张官方的图片重点学习bean作用域有哪些
注:看不清的字体,大家可以去官网查一下(链接附上)
1.prototype :原型模式,简单来说就是每次去get对象的时候都会创建一个新的对象。具体可以看官方给出的图
我们可以来看看在代码的具体实现
<bean id="user" class="com.Ethan.pojo.user" scope="prototype"/>
回到test测试类,测试一下我们在容器中取得的对象,是同一个对象还是多个对象
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
user user1 = (user) context.getBean("user");
user user2 = (user) context.getBean("user");
System.out.println(user1==user2);
System.out.println(user1.hashCode());
System.out.println(user2.hashCode());
//原型模式
}
hashcode:值来源于这个对象的内部地址转换成的整型值。(网上找的,然后再深入很麻烦没有再看)
我们可以看看对象的地址是否一样来判断生成的是多个对象还是单个对象。
显然user1和user2是两个不同的对象
2.singleton:单例模式,从容器中get的对象是同一个(spring的default)
官网给出的图,我觉得对我们理解singleton可以更加直观
<bean id="user" class="com.Ethan.pojo.user" scope="singleton"/>
public void test(){
//单例模式
ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
user user1 = (user) context.getBean("user");
user user2 = (user) context.getBean("user");
System.out.println(user1==user2);
System.out.println(user1.hashCode());
System.out.println(user2.hashCode());
}
我们可以看看我们的输出结果
输出的地址一致说明我们get到的user1和user2是同一个对象。
对spring的理解:我们在使用这些对象的时候。xml中配置的文件,会给我们把这些对象加入到IOC容器中,我们去取这些对象就行了
5.bean自动装配
1.AutoWire:1.ByName,2.ByType
- byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的bean id
- byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean!
@Autowired:它会自动寻找id相同的bean,说白了就是通过byName寻找
@Qualifier(value=" "):会寻找到与value相同的beanId的对象
**@Autowired(**required = false)
@Resource被弃用