文档章节

Sping的基础知识总结(01)

六扇門-大掌柜
 六扇門-大掌柜
发布于 2016/10/08 22:09
字数 1903
阅读 4
收藏 0
点赞 0
评论 0

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
	
    <bean name="user" class="cn.spring.test01.User" scope="singleton" lazy-init="default" init-method="initUser" destroy-method="distoryUser"></bean>
	
</beans>      

测试代码 /*** * 对象创建 scope =singleton 默认值 单例模式 * scope=protoytpe 原形 不是单例模式 * 区别 protoytpe 只有使用时候才创建对象 * singleton 默认启动的就创建 并且只创建一个 * lazy-init 默认为false 不延迟创建 启动的时候就创建(只对singleton有效) * lazy-init true 在用到对象的时候 才创建对象 * init-method 初始化方法的调用 * destroy-method 销毁方法的调用(注意要调用destory方法) * * */

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	 ClassPathXmlApplicationContext ac  =new ClassPathXmlApplicationContext("cn/spring/test01/applicationContext.xml");
	 System.out.println("创建容器了....");
     User user =(User) ac.getBean("user");
	 System.out.println(user);
	 ac.destroy(); 
	 
	}

bens的创建和scope模式有关 单利模式 下的懒加载 就是在需要的时候才创建对象 否则就是启动的时候就自动去创建对象 而且是唯一的单例对象 prototype模式是原形模式在需要的时候才创建对象

实体类对象

package cn.spring.test01;

public class User {
	 public int getId() {
		return id;
	}
	 public User(){
		 System.out.println("创建对象了...");
	 }
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	private int id;
	 private String name;
	 
	 public void initUser(){
		 System.out.println("初始化======");
	 }
	 public void distoryUser(){
		 System.out.println("销毁对象=====");
	 }
}

----------------------------------------------IOC容器的创建----------------------------------------------------------- (1)通过构造函数创建 配置文件如下

<!-- 调用有参函数创建对象 -->

  <bean id="user2" class="cn.spring.test01.User">
    <constructor-arg value="1" index="0" type="int" name="id"></constructor-arg>
     <constructor-arg value="jakec" index="1" type="java.lang.String" name="name"></constructor-arg>
   </bean>

有参构造函数
	```
 public User(int id,String name){
		 System.out.println("调用有参构造函数"+id+"---"+name);
		 this.id=id;
		 this.name=name;
	 }
	 
(2)通过set方法依赖注入,最常用的方式

   <bean id="user" class="cn.spring.test02.User">
        <property name="id" value="555"></property>
         <property name="name" value="yunzhishang"></property>
        </bean> 
 需要有对象属性的set方法
	public void setId(int id) {
		this.id = id;
	}
	public void setName(String name) {
		this.name = name;
	}
(3)通过工厂模式

<!-- -工厂类实例方法创建对象 -->

 <bean id="factory" class="cn.spring.test01.UserFactory"></bean>
 <bean id="user3" factory-bean="factory" factory-method="getInstance"></bean>
工厂模式中创建方法getInstance

private User getInstance(){		
	return new User(100, "通过工厂模式调用实例创建对象");
}
(4)通过set方式创建的两种方式demo
    <bean id="userDao" class="cn.spring.test02.UserDao"></bean>
     <bean id="userService" class="cn.spring.test02.UserService">
      <property name="userDao" ref="userDao"></property>
     </bean>
     <bean id="userAction" class="cn.spring.test02.UserAction">
      <property name="userService" ref="userService"></property>
     </bean>
     
       //内部bena的用法
        <bean id="userAction1" class="cn.spring.test02.UserAction">
          <property name="userService">
           <bean class="cn.spring.test02.UserService">
             <property name="userDao">
              <bean class="cn.spring.test02.UserDao"></bean>
             </property>
           </bean>
          </property>
        </bean>
(5)p标签的方式实现

  <bean id="userDao" class="cn.spring.test02.UserDao"></bean>
       <bean id="userService" class="cn.spring.test02.UserService" p:userDao-ref="userDao"></bean>
       <bean id="userAction" class="cn.spring.test02.UserAction" p:userService-ref="userService"></bean>
(6)AOP面向切片的编程
面向切片其实是把核心方法和公共方法分开的一种模式
切片类:公共方法涵盖的一些需要动态植入的一些类
切入点:需要动态植入的方法
配置信息:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"      //注意加入此命名
    xsi:schemaLocation="
         http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">
   <!-- 开启注解扫描 --> 
  <context:component-scan base-package="cn.spring.aop"></context:component-scan>
  <!--开启AOP注解模式 -->
  <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

</beans> ``` 切片类: ``` @Component //加入IOC容器 @Aspect //声明为切片类 public class Aop {

 //切片表达式 表示 在UserDao下面的所有方法前都加入改方法
@Before("execution( * cn.spring.aop.UserDao.*(..))")
public void begin(){
	System.out.println("核心代码提交开始...");
}

 //切片表达式 表示 在UserDao下面的所有方法后都加入改方法
@After("execution( * cn.spring.aop.UserDao.*(..))")
public void end(){
	System.out.println("核心代码提交完成...");
}

}


(7)aop的xml 的配置
bean.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"     
    xsi:schemaLocation="
         http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">
      <bean id="UserDao" class="cn.spring.aopxml.UserDao"></bean>  
      <bean id="OrderDao" class="cn.spring.aopxml.OrderDao"></bean>
      <bean id="aop" class="cn.spring.aopxml.Aop"></bean>
      <aop:config>
      <!-- 表示 对cn.spring.aopxml包下面的所有类 所有方法拦截 注意切片表达式是定位到方法-->
      <aop:pointcut expression="execution(* cn.spring.aopxml.*.*(..))" id="pt"/>
       <aop:aspect ref="aop">
       <!-- 在方法之前插begin方法 -->
       <aop:before method="begin" pointcut-ref="pt"/>
       <!-- 在方法之后插入end方法 -->
       <aop:after method="end" pointcut-ref="pt"/>
      </aop:aspect>
      </aop:config> 
</beans>      
(8)spring 的jdbc的方法
 xml的配置如下
配置spring的dataSource的配置
    <!----注意 dataSource的class是com.mchange.v2.c3p0.ComboPooledDataSource 需要引入c3p0->
      <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
       <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql:///test"></property>
		<property name="user" value="root"></property>
		<property name="password" value="123456"></property>
		<property name="initialPoolSize" value="3"></property>
		<property name="maxPoolSize" value="10"></property>
		<property name="maxStatements" value="100"></property>
		<property name="acquireIncrement" value="2"></property>
      </bean> 
spring中的模板对象JdbcTemplate
      <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="dataSource"></property>
      </bean>
  <bean id="userDao" class="cn.spring.jdbc.UserDao">
       <property name="jdbcTemplate" ref="jdbcTemplate"></property>
      </bean> 
代码:
public class UserDao {
	private JdbcTemplate jdbcTemplate;
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
	
	public int save(){
		 String sql="insert into trole(ID,TEXT) values(?,?)";
		 int res=-1;
		 res= jdbcTemplate.update(sql,UUID.randomUUID().toString(),"哈哈哥");
		 return res;
	}
	
}

(9)spring中的事物操作

xml配置如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    	 http://www.springframework.org/schema/beans/spring-beans.xsd
     	 http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/tx
     	 http://www.springframework.org/schema/tx/spring-tx.xsd">
  
      <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
       <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql:///test"></property>
		<property name="user" value="root"></property>
		<property name="password" value="123456"></property>
		<property name="initialPoolSize" value="3"></property>
		<property name="maxPoolSize" value="10"></property>
		<property name="maxStatements" value="100"></property>
		<property name="acquireIncrement" value="2"></property>
      </bean>   
         
      <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="dataSource"></property>
      </bean>
      <bean id="userDao" class="cn.spring.transtion.UserDao">
       <property name="jdbcTemplate" ref="jdbcTemplate"></property>
      </bean>
      <bean id="userService" class="cn.spring.transtion.UserService">
      <property name="userDao" ref="userDao"></property>
      </bean>   
       <!-- -事物管理器类 -->
      <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"></property>
      </bean>  
      <!-- -配置事物增强 -->    
      <tx:advice id="txAdvice" transaction-manager="txManager">
         <tx:attributes>
          <tx:method name="get" read-only="true"/>
          <tx:method name="find" read-only="true"/>
          <tx:method name="*" read-only="false"/>
         </tx:attributes>
      </tx:advice>	
      	<!-- -aop配置  表示拦截- -cn.spring.transtion.UserService.Save(..) 应用事物>
		<aop:config>
			<aop:pointcut expression="execution (* cn.spring.transtion.UserService.Save(..))" id="pt"/>
			<aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
		</aop:config>
</beans>      


核心代码

public class UserService { @Resource private UserDao userDao; public int Save(){ int res=-1; res=userDao.save();

	return res;
}

}

public class UserDao {

private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
	this.jdbcTemplate = jdbcTemplate;
}
@Transactional
public int save(){
	 String sql="insert into trole(ID,TEXT) values(?,?)";
	 int res=-1;
	 res= jdbcTemplate.update(sql,UUID.randomUUID().toString(),"哈哈哥yeyey");
	 return res;
}

}



(10)通过注解模式操作事物

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
   <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
	<property name="jdbcUrl" value="jdbc:mysql:///test"></property>
	<property name="user" value="root"></property>
	<property name="password" value="123456"></property>
	<property name="initialPoolSize" value="3"></property>
	<property name="maxPoolSize" value="10"></property>
	<property name="maxStatements" value="100"></property>
	<property name="acquireIncrement" value="2"></property>
  </bean>      
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	<property name="dataSource" ref="dataSource"></property>
</bean>
  <!-- 事务管理器类 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"></property>
</bean>
   <!-- -开启扫描 -->
   <context:component-scan base-package="cn.spring.annotion"></context:component-scan>

<tx:annotation-driven transaction-manager="txManager"/> </beans>

UserDao层

@Repository public class UserDao {

@Resource
private JdbcTemplate jdbcTemplate;

public int save(){
	 String sql="insert into trole(ID,TEXT) values(?,?)";
	 int res=-1;
	 res= jdbcTemplate.update(sql,UUID.randomUUID().toString(),"哈哈哥yeyey");
	 return res;
}

}

UserService层

@Service public class UserService {

@Resource 
private UserDao userDao;

@Transactional   //加入事物
public int Save(){
	int res=-1;
	res=userDao.save();

	return res;
}

}


Action层
public static void main(String[] args) {
	  ApplicationContext ac=new ClassPathXmlApplicationContext("cn/spring/annotion/bean.xml");
      UserService service=(UserService) ac.getBean("userService");
	  int res= service.Save();
	  if(res!=-1)
		  System.out.println("保存成功");
	  else
		  System.out.println("保存失败");
}

© 著作权归作者所有

共有 人打赏支持
六扇門-大掌柜
粉丝 0
博文 22
码字总数 31767
作品 0
武汉
程序员
《Spring敲门砖之基础教程第一季》 第二章(1) Spring框架之IOC首例-HelloWorld

回顾 上一章我们主要学习了Spring的一些理论知识,对Spring框架有了一个总体的概括,大家应该在头脑里形成一个初步的印象,接下来我们就会针对Spring框架进行一些列的实践讲解,通过例子来展...

宋建国 ⋅ 2016/08/22 ⋅ 0

linux新手入门必看

linux运维工程师是目前IT行业是比较吃香的职业,很多人认为,缺口的,需求量大,工作一定很好找,薪资高,不错,Linux相关工作很好找,但是,薪资的高低更多的是取决于你所掌握的技术。那么,...

python入门 ⋅ 2017/12/11 ⋅ 0

Spring框架知识总结-注入Bean的各类异常

近日整合sping和hibernate框架时遇到了一系列的异常,本次主要说明一下spring框架可能出现的异常及解决方案。 我们借助sping强大的bean容器管理机制,通过BeanFactory轻松的实现javabean的生...

宋建国 ⋅ 2016/08/07 ⋅ 0

在哪里报linux运维培训班更好找工作?薪资高

linux运维工程师是目前IT行业是比较吃香的职业,很多人认为,缺口的,需求量大,工作一定很好找,薪资高,不错,Linux相关工作很好找,但是,薪资的高低更多的是取决于你所掌握的技术。那么,...

运维自动化 ⋅ 2017/12/11 ⋅ 0

CentOS 6.3 切换桌面模式和命令行模式探索

在《鸟哥的Linux私房菜——基础学习篇》中,CentOS系统中命令行模式的快捷键是[Ctrl]+[Alt]+[F1]~[F6],桌面模式的快捷键为[Ctrl]+[Alt]+[F7],而笔者在自己的电脑中按照书中的说明进行操作发...

方小达 ⋅ 2013/01/24 ⋅ 0

mysql入门很简单(一)

之前一直都只会一些mysql简单的操作,对mysql的理解也不是很熟悉,找了很多mysql的基础书籍,也不是很理想,后来发现一本《mysql入门很简单》发现还不错,看了两遍,mysql基础的教程也不是很...

3147972 ⋅ 2014/01/15 ⋅ 0

Spring MVC入门基础项目环境搭建

本文章知道简单的能够搭建Sping MVC环境进行代码基础开发。 根据Spring的体系结构图画出Spring开发过程中涉及的文件和交流细节: Spring MVC流程说明: 用户请求http://127.0.0.1:8080/user/...

蚂蚁也疯狂 ⋅ 2014/02/19 ⋅ 6

java初级面试题(sql方面)

下面我给大家带来一些数据库知识点和面试题。 下列的链接是我看到非常好的java基础面试题的博文推荐给大家。 http://blog.csdn.net/jackfrued/article/details/44921941/ 关系数据库这一块是...

The_flying_pig ⋅ 2017/12/18 ⋅ 0

50行代码实现简单网站服务器?

本系列教程将和您一起探讨如何利用Java语言一步一步实现自己的web服务器。 1 需求描述 第1讲我们要实现的效果是:当我们在浏览器的地址栏输入localhost:8080的时候,我们会看到"hello,this i...

算法与编程之美 ⋅ 2017/03/07 ⋅ 3

【在职备考经验帖】从学不下CPA到395.5分一次过六科

从收到成绩到现在,我一直在坚持做一件事:邀请这24位一次过六科、40多位一次过五科的学员写下经验帖,分享给有着同样身份与境遇、怀揣顾虑迟迟无法下决心报考CPA的学员。 希望这些经验帖能给...

李彬 ⋅ 2017/12/31 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部