Spring框架的学习
- IOC控制反转
- AOP面向切面
Spring 的依赖注入(DI)
所谓依赖注入,就是IOC容器在运行期间,动态地将对象的依赖关系注入到对象的属性中。
底层原理:Spring 根据配置文件中配置依赖关系,首先获取被依赖的对象dao实例,调用service对象中的set方法将dao实例设置(注入)到service当中去。
- 设值注入
- 构造注入
设值注入
//设值注入
<bean id= "xxx" class="类的全路径dao"></bean>
<bean id="yyy" class="类的全路径service">
<property name="属性名" ref="xxx" ></property>
</bean>
构造注入
<bean id="yyy" class="类的全路径service">
<constructor-arg name="xxx" ref=xxx"">
</bean>
<bean id= "xxx" class="类的全路径dao"></bean>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//无参构造方法
<bean id="xxx" class="类的全路径"></bean>
//有参构造方法
添加有参的构造器
<bean id="xxx" class="类的全路径">
<constructor-arg index="0" value="110" type="java.lang.Long">
<constructor-arg index="1" value="quanbao" type="java.lang.Long">
</bean>
静态工厂
<bean id="ccc" class="类的全名" factory-method="工厂的方法名"></bean>
Spring加载配置文件的方法
// Spring 加载配置文件的方法
ApplicationContext application = new ClassPathXmlApplicationContect("xxx.xml");
ApplicationContext application2 = new ClassPathXmlApplicationContect(new String["xxx.xml","sss.xml"]);
ApplicationContext application3 = new ClassPathXmlApplicationContect("classpath:xxx*.xml");
//
Bean 的作用域
Dao:单例(为什么用单例?是线程安全的,用多线程是线程不安全的)
Service:单例
Action:多例(在bean 中添加 scope=“prototype”)
servlet:单例
基于注解(ICO的开发)
实例化注解
- @Repository(“xxxx”) 标示它是一个dao,指定ben的名称,不指定默认为类名(首字母小写)
- @Service(“xxxx”)使用Service注解标示此ben为一个业务Service
- @Controller(“xxxx”)使用controller标示此ben为一个控制器
- @Scope(“prototype”)使用scope注释标示一个多例
- @component(“sss”)可以用在任何的ben上
在Bean中配置扫描的组件
<context:component-scan base-package=“包路径”></context:component-scan>
依赖注入的注解
用在属性和方法上面
- @Autowired 按类型注入
- @Qualifire(“bean 的名称”)指定注入的bean
@Resource(“bean的名称”) 此注解去bean的容器去找bean —此注解是jdk的
激活属性注解:</context:annotation-config> 如果没有用前面的那四种类的注解
Spring的底层原理