提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
介绍Spring6 IOC相关内容,没有AOP,后面状态好会补的
提示:以下是本篇文章正文内容,下面案例可供参考
一、IOC
1.创建对象
管理所有Java对象的实例化和初始化,控制对象与对象间的依赖关系。
通过BeanFactory工厂+反射 创建对象
//获取class对象
class clazz=class.forName("com.atguigu.spring6.User");
//调用方法创建对象
User user=(User) clazz.getDeclaredConstructor().newInstance();
Sysyem.out.println(user);
2.依赖注入(IOC的具体实现)
在创建对象的过程的中,将对象依赖属性注入值(可以是基础属性,也可以是个对象)
使用子类 ApllicationContext
二、基于xml管理bean
1.获取bean的三种方式
psvm{ApllicationContext context=new ClasspathxmlApllikcationContext("bean.xml");
}
//根据id获取bean
User user1=(User) context.getBean("user");
sout("根据id获取bean:"+user1);
//根据类型获取bean(要求类型跟对象唯一)
User user2=context.getBean(User.class);
sout("2根据类型获取bean:"+user2)
//根据id和类型获取bean
User user3=context.getBean("user",User.class);
sout("3根据id和类型获取bean:"+user3)
2.类型唯一
如果接口有实现类,可以通过接口类型获取bean吗?
可以,如果bean唯一(多态)
如果一个接口有多个实现类,可以通过接口类型获取bean吗?
不行,因为bean不唯一
三、注入
1.通过set方法注入(name是set方法方法名第一个字母小写)
<bean id=... class=...>
<property name="bname" value ="前端开发"></property>
<property name="author" value="尚硅谷"></propertry>
2.通过构造器注入
<bean id=... class=...>
<constructor-arg name="bname" value ="前端开发"></constructor-arg>
<constructor-arg name="author" value="尚硅谷"></constructor-arg>
3.特殊值处理
3.1字面量赋值(无特殊含义)
3.2null
<property name="bname">
<null/>
</property>
3.3xml 实体(通过转义解决)
<property name="bname" value="<>"></property>
3.4 CDATA节(不想通过转义解决)
<property name="bname">
<value> <![CDATA[a<b]]></value>
</property>
4.引入外部bean
<bean id="dept" ···></bean>
<bean id="emp" class=···>
<property name="dept" ref="dept"></property>
</bean>
5.内部bean
<bean id="emp2" class=···>
<property name=··· value=···></property>
<property name="dept" >
<bean id="dept2" class=···>
</property name="dname" value="财务部"></property>
</bean>
</property>
</bean>
6.级联复制(外部bean+调用)
<bean id="dept3" class=···></bean>
<bean id="emp3" class=···>
<property name="dept" ref="dept3"></property>
<property name="dept3.dname" value="测试部"></property>
</bean>
7.数组类型注入
<property name="loves">
<array>
<value>吃饭</value>
<value>睡觉</value>
<value>敲代码</value>
</array>
</property>
8.List集合注入
<property name="empList">
<list>
<ref bean="···"></ref> <!--id-->
<ref bean="···"></ref>
</list>
</property>
9.Map集合注入
<map>
<entry>
<key>
<value>10010</value>
</key>
<ref bean="···"></ref>
</entry >
</map>
10.引用集合类型
<util:list id="productServiceList">
<ref bean="clothingProductService"/>
<ref bean="electronicsProductService"/>
</util:list>
<util:map id="categoryServiceMap">
<entry key="clothing" value-ref="clothingCategoryService" />
<entry key="electronics" value-ref="electronicsCategoryService" />
</util:map>
11.p命名空间注入(改依赖 xmlns:p=···)
<bean id=··· class=···
p:sid="100" p:sname="" ···/>
12.引入外部属性文件
<context:property-placeholder location="···">
四、bean的生命周期
1.bean对象的创建(调用无参构造)
2.给bean对象设置相关属性(set方法)
3.bean对象的初始化
4.bean对象创建完成,可以使用
5.bean 对象销毁
五、FactoryBean
implements FactoryBean 方法,不实现FactoryBean对象,而是实现getObject()方法得到的对象
六、自动装配
<bean ···· autowire="byType">
<bean ···· autowire="byName"> <!--Service属性名要等与bean id名-->
七、开启组件扫描
<context:component-scan base-package="···"></context>
八、注解
@Component=@service=@Repository=@Controller 在springMVC中,Controller会将@RequestMapping注解封装成RequestMappingInfo
@Resource 根据名称进行匹配
全注解开发
@ComponentScan(“要扫描的类”)
@Autoweired
@Qualifier 根据名称进行注入
总结
没有注解的相关内容,而且aop也没听,大概是p56-p57的内容
4301

被折叠的 条评论
为什么被折叠?



