文档章节

Sping的基础知识总结(01)

六扇門-大掌柜
 六扇門-大掌柜
发布于 2016/10/08 22:09
字数 1903
阅读 5
收藏 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
16
0
Spring框架知识总结-注入Bean的各类异常

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

宋建国
2016/08/07
924
0
在哪里报linux运维培训班更好找工作?薪资高

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

运维自动化
2017/12/11
0
0
linux新手入门必看

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

python入门
2017/12/11
0
0
CentOS 6.3 切换桌面模式和命令行模式探索

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

方小达
2013/01/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
2
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
14
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部