spring初学 day01
1 spring 介绍,以及spring 框架的优势
spring框架是一个企业级的轻量级框架,低倾入的框架(也是后期项目维护,修改代码量比较少)
优势: 1:其实spring 就是一个大工厂模式(生产管理实体bean,不用实例化对象,所有的都是通过spring容器来进行管理)
2:支持分布式事务(原子性,一致性,隔离性,持久性)
3:支持测试,与jutext测试有良好的结合;
4:与其他框架的结合度比较好(ssh,ssm)
5:支持我们企业级的api的开发(邮箱,任务调度) (超级重要)
2 spring 各个模块的介绍
bean(管理和生产对象)
core(提供一些核心的基础服务)
context(提供api开发)
3搭建spring框架的步骤
:
1:导入核心的jar包
2:导入核心配置文件(applicationContext.xml)
<?xml version="1.0" encoding="UTF-8"?>
<context:component-scan base-package=“com.offcn.service,com.offcn.dao” />
3:测试
## 4 控制反转(ioc)
概念:控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的 创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制器转移 所谓反转,目的更好的扩展性和良好的维护性。
代码:
创建一个boy对象
public class Boy {
public void say(){
System.out.println(“站着说话”);
}
在Spring容器中定义
使用app测试
ApplicationContext app=new ClassPathXmlApplicationContext("appliactionContext.xml" );
//得到具体的实体bean,这个参数就是你配置文件里的id
Boy boy= (Boy)app.getBean("boy");
boy.say();*
##5.依赖注入(以及几种配置文件加载方式)
(动态的实例化对象,用到的时候,实例化对象)
加载spring容器有三种方式
第一种是实现接口的方式;
第二种是静态工厂的方式;
第三种使用BeanFactory
/动态生成某个对象的步骤,给其set方法,配置引入对象<property name="boy" ref="boy"></property>
获取有三种方式
//第一种
ApplicationContext app=new ClassPathXmlApplicationContext(“appliactionContext.xml” );
//得到具体的实体bean,这个参数就是你配置文件里的id
Boy boy= (Boy)app.getBean(“boy”);
boy.say();*
//第二种获取全路径
/* //
ApplicationContext app2=new FileSystemXmlApplicationContext("C:\\Users\\Administrator\\IdeaProjects\\untitled\\src\\appliactionContext.xml");
//工厂方式
//这三种方式 用的最多是第一种
/* BeanFactory app=new XmlBeanFactory(new FileSystemResource(“C:\Users\Administrator\IdeaProjects\untitled\src\appliactionContext.xml”));
依赖注入:在运行周期内,由外部容器动态的将依赖对象注入到另一个对象组件中
例;
创建boy类:同上
创建Girl类:
public class Girls {
private Boy boy=null;
//调用男孩
public void setBoy(Boy boy) {
this.boy = boy;
}
public void kiss(){
boy.say();
}
}
(2)在Spring容器中定义
其中 name指girl在对象中的set方法的属性名称;
ref指容器创建的对象注入到set方法中
最后测试 同上
## 6.三种实例化bean的方式(使用p命名空间来进行赋值)
1,非静态方法
接口
`public interface UserService {
public void eat();
}`
实现类
public class UserServiceImpl implements UserService {
@Override
public void eat() {
System.out.println("正在吃饭");
}
}
在容器中定义
```
进行测试
ApplicationContext app=new ClassPathXmlApplicationContext("appliactionContext.xml" );
UserServiceImpl userService= (UserServiceImpl) app.getBean("userService");
userService.eat();
2.静态方式。
(1).在spring中定义
<bean id="userObject" class="com.offcn.utils.UserObject" factory-method="creatUserService"></bean
(2).在userObject中提供一个静态方法;
public static iuserService creatUserService() {
return new UserServiceimpl() ;
}
(3).进行测试
3.用工厂方式方法模式
(1)。在spring中定义。
<bean id="userObject" class="com.offcn.utils.UserObject"></bean>
<bean id="user" factory-bean="userObject" factory-method="creatUserService"></bean>
(2)其他同上。
7.依赖注入 手动装配(set 构造)
(1)基本
<bean id="person" class="pojo.Person" p:pid="123" p:pname="xyc"></bean>
注意p
(2)。各种类型的手动装配
<bean id="userObject" class="com.offcn.utils.UserObject">
<property name="sid" value="11"/>
<property name="sname" value="xyc"/>
<property name="person" ref="person"/>
<property name="list" >
<list>
<value>li</value>
<value>zhang</value>
<value>wang</value>
<value>zhao</value>
</list>
</property>
<property name="set">
<set>
<value>赵云</value>
<value>刘备</value>
<value>关羽</value>
<value>张飞</value>
</set>
</property>
<property name="map">
<map>
<entry key="01">
<value>哈哈</value>
</entry>
<entry key="02">
<value>呵呵</value>
</entry>
<entry key="03">
<value>嘻嘻</value>
</entry>
</map>
</property>
<property name="objects">
<array>
<value>谭杰明</value>
<value>张清</value>
</array>
</property>
</bean>
(2)。通过构造方法注入。
<bean id="student" class="pojo.Student">
<!--用构造来进行值的注入,第一个方法是通过索引,这个索引是从0开始-->
<constructor-arg name="sid" value="11"></constructor-arg>
<constructor-arg name="sname" value="xyc"></constructor-arg>
<constructor-arg name="spwd" value="233"></constructor-arg>
</bean>
8.第二种方式是注解注入(在jdk1.6以上)
(1)引入context命名空间,配置xml信息。
创建dao,daoimpl,service,serviceimpl。
在ServiceImpl中写入注释
@Autowired注释按默认类型进行装配
(2)用自动装配,
用自动装配
@Autowired
@Qualifier("userDao")
private UserDao userDao;
(3)用set方法按照名称来
@Autowired
private UserDao userDao;
public void setUserDao(@Qualifier("userDao")UserDao userDao) {
this.userDao = userDao;
}
(4)最终版,用java的注解来进行装配 ,JDK1.6以上。
@Resource
private UserDao userDao;