G_04_02Spring学习笔记

一、属性注入

	1、有参构造注入
	public class PropertyDemo1{
		private String username;
		public PropertyDemo1(String username){
			this.username=username;
		}
		public void test1(){
			System.out.println(username);
		}
	}
	bean1.xml中配置:
	<bean id="demo" class="cn.itcast.property.PropertyDemo1">
		<constructor-arg name="username" value="小王"></constructor-arg>
	</bean>
	2、set注入
	public class Book{
		private String bookname;
		public void setBookname(String bookname){
			this.bookname=bookname;
		}
		public void demobook(){
			System.out.println("book..."+bookname);
		}
	}
	public class TestIOC{
			@Test
			public void testUser(){
				ApplicationContext context=ClassPathXmlApplicationContext("bean1.xml");
				Book book=(Book)context.getBean("book");
				book.demobook();
			}
		}
	bean1.xml配置:
	<bean id="book" class="cn.itcast.property.Book">
		<property name="bookname" value="ysy"></property>
	</bean>
	3、注入对象类型属性:
		1)在bean1.xml中配置:
			<bean id="userDao" class="cn.itcast.ioc.UserDao"></bean>
			<bean id="userService" class="cn.itcast.ioc.UserService">
				<!--注入dao对象
					现在不要写value 因为刚才使字符串现在是对象
					name:service类里面属性名称
					写ref属性:dao配置bean标签id值
				-->
				<property name="userDao" ref="userDao" ></property>
			</bean>
		2)UserService类
		public class UserService{
			private UserDao userDao;
			public void setUserDao(){
				this.userDao=userDao;
			}
			public void add(){
				System.out.println("service...");
				userDao.add();
			}
		}
		public class UserDao{
			public void add(){
				System.out.println("userDao...");			
			}
		}
		public class TestIOC{
			@Test
			public void testUser(){
				ApplicationContext context=ClassPathXmlApplicationContext("bean1.xml");
				UserService userService=(UserService)context.getBean("userService");
				userService.add();
			}
		}
	4、p名称空间注入:
		public class Person{
			private String pname;
			public void setPname(String name){
				this.pname=pname;
			}
			public void test1(){
				System.out.println("person..."+pname);
			}
		}
		在bean1.xml中配置:
		<bean id="person" class="cn.itcast.property.Person" p:pname="lucy"></bean>
	5、注入复杂属性
		public class Person{
			private String pname;
			private String[] arrs;
			private List<String> list;
			private Map<String,String> map;
			private Properties properties;
			public void setArrs(String[] arrs){
				this.arrs=arrs;
			}
			public void setList(List<String> list){
				this.list=list;
			}
			public void setMap(Map<String,String> map){
				this.map=map;
			}
			public void setProperties(Properties properties){
				this.properties=properties;
			}
			public void setPname(String name){
				this.pname=pname;
			}
			public void test1(){
				System.out.println("person..."+pname);
			}
		}
		在bean1.xml中配置
		<bean id="person" class="cn.itcast.property.Person" >
			<!--数组-->
			<property name="arrs">
				<list>
					<value>小王</value>
					<value>小礼</value>
					<value>小课</value>
				</list>
			</property>
			<!--list 集合-->
			<property name="list">
				<list>
					<value>小奥</value>
					<value>小深</value>
					<value>小得</value>
				</list>
			</property>
			<!--map集合-->
			<property name="map">
				<map>
					<entry key="aa" value="lucy">小奥</entry>
					<entry key="bb" value="mary">小深</entry>
					<entry key="cc" value="tom">小得</entry>
				</map>
			</property>
			<!--properties-->
			<property name="properties">
				<pros>
					<prop key="driverClass">com.mysql.jdbc.Driver</prop>
					<prop key="username">root</prop>
				</pros>
			</property>
		</bean>

二、spring的bean管理(注解方式)

	1、注解写法:
		@注解名称(属性名称=属性值)
	2、注解适用范围:
		类上面 方法上 属性上
	3、spring注解开发准备:
		1)导入jar包:
			(1)导入基本的jar包
				commons-logging-1.2.jar
				log4j-1.2.16.jar
				spring-beans-4.2.4.RELEASE.jar
				spring-context-4.2.4.RELEASE.jar
				spring-core-4.2.4.RELEASE.jar
				spring-expression-4.2.4.RELEASE.jar
			(2)导入aop的jar包
				spring-aop-4.2.4.RELEASE.jar
		2)创建类
			@Component(value="user") //<bean id="user" class=""/>
			public class User{
				public void add(){
					System.out.println("add...");
				}
			}
			public class TestAnno{
				@Test
				public void testUser(){
					ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
					User user=(User)context.getBean("user");
					user.add();
				}
			}
		3)创建spring配置文件 引入约束
			(1)第一天做ioc基本功能 引入约束beans
			(2)做spring的注解开发 引入新的context约束
			<!--在配置文件只需要配置开启注解扫描:
				(1)到包里面扫描类、方法、属性上面是否有注解
				(2)base-package :要配置注解的类所在的包名
				-->
			<context :component-scan base-package="cn.itcast"></context:component-scan>
		4)创建对象有四个注解:
			@Controller :web层
			@Service :业务层
			@Repository :持久层
			@Component
	4、spring注解方式注入属性:
		@Service(value="userService")
		public class UserService{
			@Autowired
			private UserDao userDao;
			public void add(){
				userDao.add();
			}
		}
		@Service(value="userService")
		public class UserService{
			//name属性值写注解创建dao对象value值
			@Resource(name="userService");
			private UserDao userDao;
			public void add(){
				userDao.add();
			}
		}
		@Seervice(value="userDao")
		public class UserDao{
			public void add(){
				System.out.println("userDao。。。");
			}
		}		
	5、注解和配置文件混合使用:
		1、创建对象使用配置文件实现
		2、注入属性用注解实现
		public class BookService{
			@Resource(name="bookDao")
			private BookDao bookDao;
			@Resource(name="ordersDao")
			private OrdersDao ordersDao;
			public void add(){
				System.out.println("service...");
			}
		}
		public class OrdersDao{
			public void buy(){
				System.out.println("ordersdao...");
			}
		}
		public class BookDao{
			public void book(){
				System.out.println("bookdao...");
			}
		}
		public class TestAnno{
			@Test
			public void testService(){
				ApplicationContext context=new ClassPathXmlApplicationContext("bean2.xml");
				BookService bookService=(BookService) context.getBean("bookService");
				bookService.add();
			}
		}
		bean2.xml:
		<!--开启注解扫描-->
		<context:component-scan base-package="cn.itcast"></context:component-scan>
		<!--创建对象-->
		<bean id="bookService" class="cn.itcast.xmlanno.BookService"></bean>
		<bean id="bookDao" class="cn.itcast.xmlanno.BookDao"></bean>
		<bean id="ordersDao" class="cn.itcast.xmlanno.OrdersDao"></bean>
		

三、AOP

	1、AOP:
		采取横向抽取机制 取代传统纵向继承体系
	2、AOP操作术语
		1、Pointcut(切入点):
		2Advice(
	3、spring的AOP操作:
		1、在spring里面进行aop操作 s使用aspectjsshi实现
			1)aspectj不是spring一部分 和spring一起使用进行aop操作
			2)spring2.0以后x新增了对aspectj的支持
		2、使用aspectj实现aop由两种方式
			1)基于aspect的xml配置
			2)基于aspect的注解
	3、spring配置文件方式:
		1、导入jar:
		aopalliance-1.0.jar
		aspectjweaver-1.8.7.jar
		spring-aop-4.2.4.RELEASE.jar
		spring-aspects-4.2.4.RELEASE.jar
		2、创建spring核心配置文件、导入aop约束
		bean3.xml:
		<!--配置对象-->
		<bean id="book" class="cn.itcast.aop.Book"></bean>
		<bean id="myBook" class="cn.itcast.aop.MyBook"></bean>
		<!--配置aop操作-->
		<aop:config>
			<!--2.1配置切入点 id:给切入点配置名字 自己取-->
			<aop:pointcut expression="execution(* cn.itcast.aop.Book.*(..))" id="pointcut1"/>
			<!--2.2配置切面 -->
			<aop:aspect ref="myBook">
				<aop:before method="before1" pointcut-ref="pointcut1"/>
				<aop:after-returning method="after1" pointcut-ref="pointcut1"/>
				<aop:after-returning method="around1" pointcut-ref="pointcut1"/>
			</aop:aspect>
		</aop:config>
		3、使用表达式配置切入点
			(1execution(* cn.itcast.aop.Book.add(..));
			(2)excution(*cn.itcast.aop.Book.*(..));
			(3)excution(* *.*(..));
			(4)excution(* save*(..));
		public class Book{
			public void add(){
				System.out.println("add...");
			}
		}
		public class MyBook{
			public void befor1(){
				System.out.println("前置增强..");
			}
			public void after1(){
				System.out.println("后置增强..");
			}
			public void around1(ProceedingJoinPoint proceedingJoinPoint) throw Throwable{
				System.out.println("方法之前...");
				proceedingJoinPoint.proceed();
				System.out.println("方法之后...");
			}
		}
		public class TestAnno{
			@Test
			public void testService(){
				ApplicationContext context=new ClassPathXmlApplicationContext("bean3.xml");
				Book book=(Book)context.getBean("book");
				book.add();
			}
		}
	4、spring注解方式
		1、创建类
		public class Book{
			public void add(){
				System.out.println("add...");
			}
		}
		@Aspect
		public class MyBook{
			@Before(value="execution(* cn.itcast.aop.Book.*(..))")
			public void before1(){
				System.out.println("before..");
			}
		}
		public class TestAnno{
			@Test
			public void testService(){
				ApplicationContext context=new ClassPathXmlApplicationContext("bean3.xml");
				Book book=(Book)context.getBean("book");
				book.add();
			}
		}
		2、创建spring核心配置文件、导入aop约束
		bean3.xml:
		<!--配置对象-->
		<bean id="book" class="cn.itcast.aop.Book"></bean>
		<bean id="myBook" class="cn.itcast.aop.MyBook"></bean>
		<!--开启aop操作-->
		<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

在这里插入图片描述

四、spring的jdbcTemplate

	1、jdbcTemplate对jdbc进行封装
	2、增加 删除 修改 查询:
		1)导入jar包
		spring-jdbc-4.2.4.RELEASE.jar
		spring-tx-4.2.4.RELEASE.jar
		导入数据库驱动
		2)创建对象 sh设置数据库信息
		3)创建jdbcTemplate对象 设置数据源
		4)调用jdbcTemplate模板方法
		
		public class JdbcTemplateDemo1{
			@Test
			public void add(){
				//设置数据库信息
				DriverManagerDateSource dataSource=new DriverManagerDateSource();
				dataSource.setDriverClassName("com.mysql.jdbc.Driver");
				dataSource.setUrl("jdbc:mysql:///spring_day03");
				dataSource.setUsername("root");
				dataSource.setPassword("root");
				//创建jdbcTemplate对象s设置数据源
				IdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
				//调用jdbcTemplate方法实现操作
				//创建sql语句
				String sql="insert into user value(?,?)";
				int rows=jdbcTemplate.update(sql,"lucy","250");
			}
			@Test	//修改
			public void update(){
				//设置数据库信息
				DriverManagerDateSource dataSource=new DriverManagerDateSource();
				dataSource.setDriverClassName("com.mysql.jdbc.Driver");
				dataSource.setUrl("jdbc:mysql:///spring_day03");
				dataSource.setUsername("root");
				dataSource.setPassword("root");
				//创建jdbcTemplate对象s设置数据源
				IdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
				//调用jdbcTemplate方法实现操作
				//创建sql语句
				String sql="update user set password=? where username=?";
				int rows=jdbcTemplate.update(sql,"1314","lucy");
			}
			@Test	//删除
			public void delete(){
				//设置数据库信息
				DriverManagerDateSource dataSource=new DriverManagerDateSource();
				dataSource.setDriverClassName("com.mysql.jdbc.Driver");
				dataSource.setUrl("jdbc:mysql:///spring_day03");
				dataSource.setUsername("root");
				dataSource.setPassword("root");
				//创建jdbcTemplate对象s设置数据源
				IdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
				//调用jdbcTemplate方法实现操作
				//创建sql语句
				String sql="delete from user where username=?";
				int rows=jdbcTemplate.update(sql,"lucy");
			}
			@Test	//查询表有多少条记录
			public void testQuery(){
				//设置数据库信息
				DriverManagerDateSource dataSource=new DriverManagerDateSource();
				dataSource.setDriverClassName("com.mysql.jdbc.Driver");
				dataSource.setUrl("jdbc:mysql:///spring_day03");
				dataSource.setUsername("root");
				dataSource.setPassword("root");
				//创建jdbcTemplate对象s设置数据源
				IdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
				//调用jdbcTemplate方法实现操作
				//创建sql语句
				String sql="select count(*) from user";
				int count=jdbcTemplate.queryForObject(sql,Integer.class);
			}
			@Test	//查询返回对象
			public void testObject(){
				//设置数据库信息
				DriverManagerDateSource dataSource=new DriverManagerDateSource();
				dataSource.setDriverClassName("com.mysql.jdbc.Driver");
				dataSource.setUrl("jdbc:mysql:///spring_day03");
				dataSource.setUsername("root");
				dataSource.setPassword("root");
				//创建jdbcTemplate对象s设置数据源
				IdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
				//调用jdbcTemplate方法实现操作
				//创建sql语句
				String sql="select * from user where username=?";
				User user=jdbcTemplate.queryForObject(sql,new MyRowMapper(),"mary");
			}
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值