Spring学习笔记
学习来源博客
https://blog.****.net/weixin_44207403/article/details/106736102?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169449699416800192275708%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=169449699416800192275708&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-106736102-null-null.142v93chatsearchT3_1&utm_term=spring&spm=1018.2226.3001.4187
- beans.xml
这里的name并不是属性 , 而是set方法后面的那部分 , 首字母小写
<bean id="user" class="com.kuang.pojo.User">
<property name="name" value="kuangshen"/>
</bean>
public void setName(String name) {
this.name = name;
}
- 有参构造方法的beans.xml
<!-- 第一种根据index参数下标设置 -->
<bean id="userT" class="com.kuang.pojo.UserT">
<!-- index指构造方法 , 下标从0开始 -->
<constructor-arg index="0" value="kuangshen2"/>
</bean>
<!-- 第二种根据参数名字设置 -->
<bean id="userT" class="com.kuang.pojo.UserT">
<!-- name指参数名 -->
<constructor-arg name="name" value="kuangshen2"/>
</bean>
<!-- 第三种根据参数类型设置 -->
<bean id="userT" class="com.kuang.pojo.UserT">
<constructor-arg type="java.lang.String" value="kuangshen2"/>
</bean>
参数名的name
public UserT(String name) {
this.name = name;
}
- 要求被注入的属性 , 必须有set方法 , set方法的方法名由set + 属性首字母大写 , 如果属性是boolean类型 , 没有set方法 , 是 is .
- 注入的不同写法
常量注入和bean注入
<bean id="student" class="com.kuang.pojo.Student">
<property name="name" value="小明"/>
<property name="address" ref="addr"/>
</bean>
其他的还有array、list、map等注入的书写方式都不同
大概是这样的
<property name="card">
<map>
<entry key="中国邮政" value="456456456465456"/>
<entry key="建设" value="1456682255511"/>
</map>
</property>
<property name="hobbys">
<list>
<value>听歌</value>
<value>看电影</value>
<value>爬山</value>
</list>
</property>
当一个bean节点带有 autowire byName的属性时。
将查找其类中所有的set方法名,例如setCat,获得将set去掉并且首字母小写的字符串,即cat。
去spring容器中寻找是否有此字符串名称id的对象。
如果有,就取出注入;如果没有,就报空指针异常。
使用autowire byType (按类型自动装配)
使用autowire byType首先需要保证:
同一类型的对象,在spring容器中唯一。如果不唯一,会报不唯一的异常。
加上autowire="byName"或者“byName”的作用,就可以在外面写bean,不用ref关联上了
<bean id="cat" class="com.spring.pojo.Cat"/>
<bean id="dog" class="com.spring.pojo.Dog"/>
<bean id="user" class="com.spring.pojo.User" autowire="byName">
<!-- 注释掉-->
<!-- <property name="cat" ref="cat"/>-->
<!-- <property name="dog" ref="dog"/>-->
<property name="username" value="jiang"/>
</bean>
几个注解进行自动装配
@Autowired
@Autowired是按类型自动转配的,不支持id匹配。
@Qualifier
@Autowired是根据类型自动装配的,加上@Qualifier则可以根据byName的方式自动装配
<bean id="cat" class="com.spring.pojo.Cat"/>
<bean id="cat02" class="com.spring.pojo.Cat"/>
<bean id="dog" class="com.spring.pojo.Dog"/>
<bean id="dog02" class="com.spring.pojo.Dog"/>
<bean id="user" class="com.spring.pojo.User">
<property name="username" value="jiang"/>
</bean>
@Autowired
@Qualifier(value = "cat02")
private Cat cat;
@Autowired
@Qualifier(value = "dog02")
private Dog dog;
@Resource
@Resource(属于J2EE规范),默认按照名称进行装配,名称可以通过name属性进行指定。如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配
public class User {
//如果允许对象为null,设置required = false,默认为true
@Resource(name = "cat2")
private Cat cat;
@Resource
private Dog dog;
private String str;
}
使用@Resource、@Autowired注解bean里也可以不用ref关联,而且类里不用再写set方法
注解进行属性注入
@Component三个衍生注解
为了更好的进行分层,Spring可以使用其它三个注解,功能一样,目前使用哪一个功能都一样。
@Controller:controller层
@Service:service层
@Repository:dao层
@Component("user")
// 相当于配置文件中 <bean id="user" class="当前注解的类"/>
public class User {
@Value("秦疆")
// 相当于配置文件中 <property name="name" value="秦疆"/>
public String name;
}
用了这些注解就不用配置bean也不用set方法了
上一篇: 快速排序方法及其改进策略
下一篇: 快速排序及优化