Spring 基础

1Spring是什么

Spring 是一个开源的控制反转(Inversion of Control) IOC 和面向切面(AOP) 的容器框架,它的主要目的就是简化企业开发.


IOC (Inversion of Control)

//1.之前 的应用
public class PersonServiceBean(){
private PersonDao personDao=new PersonDaoBean();

public void save(Person person){
personDao.save(person);
}
}

/**2.PersonDaoBean 是在应用内部创建的维护,所谓控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的创建和维护是有外部容器负责.这样控制权就由应用程序到外部容器,控制权的转移 就是所谓的反转.*/

//3.使用IOC
public class PersonServiceBean(){
private PersonDao personDao;
public PersonServiceBean(PersonDao personDao){
this.personDao=personDao;
}

public void save(Person person){
personDao.save(person);
}
}

//4. 所谓的依赖注入就是指,在运行期,由外部容器动态的将依赖对象注入到组件中.



3.Spring 的好处

1.降低组件之间的耦合度,是向软件各层之间的解耦

2.可以使用容器提供众多的服务,如,事务管理服务,消息服务等,当我们使用容器管理事务时,开发人员就不需要手工控制事务,也不需要处理复杂的事务传播.

3.容器提供单利模式支持,开发人员不在需要手动编写实现代码.

4.容器提供了AOP技术,利用他很容易实现如权限拦截,运行期监控等功能

5.容器提供了众多辅佐类,使用 这些类能够加快应用的开发,如 jdbcTemplate,HibernateTemplate.

6.Spring对于主流的应用框架提供了集成支持,如 Hibernate JPA Struts ibatis mybatis 等 便于应用的开发.



4.来看事务的传播属性

public void paymnet(){
Bean1.update(); //更新金额
Bean2.save(); //记录日志操作

}

//之前是这样做的
public class Bean1{
public void upate(){
Connect conn=null;
con.setSutoCommit(false);
Statement.executeUpdate("update account set amount =? where id=?");
}

}
public class Bean2{
public void save(){
Connection con=null;
con.setAutoCommit(false);
Statement.executeUpdate("insert into Log(content) values (?)");
}
}

//如果我们不使用SPring,针对下面的两种业务需求,我们该如何做
//1 要求 Bean1.upate 和Bean2.save() 在同一个事务中执行
//2. 要求 不管Bean1.update() 的是否成功,都需要记录操作日志.
这样我就只有 修改代码 传入 同一个 Connection


//5下面看看使用spring的事务传播属性


@Transactional(propagation=Propagation.Required)
public void paymnet(){
Bean1.update(); //更新金额
Bean2.save(); //记录日志操作

}

public class Bean1{
@Transactional(propagation=Propagation.Required)
public void update(){
executeUpdate("update account set amount= ? where id=? ");
}
}

public class Bean2{
@Transactional(propagation=Propagation.Required)
//@Transactional(propagation=Propagation.RequiredNew) 对于上面需求第二种
public void save(){
executeUpdate("insert into Log(content) values (?)");
}

}


//6 spring 是重量级 还是 轻量级

其实划分一个应用是否属于轻量级还是重量级,主要看他使用了多少服务.使用的服务越多,容器要为普通java对象做的工作越多,必然会影响应用的发布时间 或者 运行性能.
EJB容器就是因为他默认为应用提供了EJB中所有的功能,所以它是重量级.



//7.Spring 容器的初始化

//1. 使用类路径寻找配置文件 通用
ApplicationContext ctx= new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
IStudentService studentService=(IStudentService)context.getBean("studentService");

//2.使用文件系统来寻找配置文件实例化容器 不通用 在linux等 就会有问题
ApplicationContext ctx=new FileSystemXmlApplicationContext(new String[]{"d:\\beans.xml"});

//通过数组传入 多个配置文件.


//8.Spring 配置文件 没有提示

1.主要是由于myEclipse 中没有spring 文件模版, 没有从网络上下载下来,如果下载下来后 就会缓存起来的

2.如果没有联网 就手动设置呗
myeclipse -->window--->prefarence--->myeclipse-->files and editors -->xml--->xmlCatalog --->add 在 弹出的窗口中Location 选中 File System --->dist\resources\spring-beans-2.5.xsd -->修改 key Type =Schema Location ---> 修改key 为 http://www.springframework.org/beans/spring-beans-2.5.xsd --ok


//9. bean 配置节点中的id 和 name 的区别

<bean id="personService" name="/personService/"></bean>

id:本身就是xml的一个属性,这个属性受到xml解析器的限制不能有特殊字符,有些情况下 要为bean 的名字定义特殊字符 此时就需要使用 name.(spring建议我们配置bean的第一个字母要小写)

name:可以包含特殊字符的 bean 的名字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值