Spring学习笔记——第二天

Spring学习笔记

一、基于aspect的注解实现AOP

第一步、创建对象的Bean



第二步、在spring核心配置文件中开启AOP操作



第三步、在增强的类上使用注解

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class MyBook {

	//在方法上面使用注解完成增强配置
	@Before(value="excution(* com.itcast.aop.Book.*(...))")
	public void before() {
		System.out.println("Before.....");
		
	}
}

 Spring使用注解实现AOP需要导入的包

Spring学习笔记——第二天_第1张图片

二、使用Spring中的JDBC模板(JDBCTempelete)实现数据库操作

第一、使用JDBCTempelete中的update()函数可以完成添加、删除、修改操作

例如:

public void testOne() {
		DriverManagerDataSource ds=new DriverManagerDataSource();
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		ds.setUrl("jdbc:mysql://localhost:3306/draw_life");
		ds.setUsername("root");
		ds.setPassword("123456");
		
		JdbcTemplate jt=new JdbcTemplate(ds);
		
		//修改操作
		String sql="update User set password=? where Name=?";
		int rows=jt.update(sql, "5555","tom");
		//添加操作
		String sql2="insert into User values(?,?)";
		int rows2=jt.update(sql2, "bok","5555");
		//删除操作
		String sql3="delete from user where Name=?";
		int rows3=jt.update(sql3, "tom");
		
		System.out.println(rows);
		System.out.println(rows2);
		System.out.println(rows3);
	}

第二、查询

jdbcTempelete实现查询,有一个接口RowMapper,jdbcTempelete针对这个接口没有提供实现类,所以需要自己进行数据的封装。

jdbcTempelete完成查询分成三种类型:

(1)查询返回某一个值

public void testCount() {
		DriverManagerDataSource ds=new DriverManagerDataSource();
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		ds.setUrl("jdbc:mysql://localhost:3306/draw_life");
		ds.setUsername("root");
		ds.setPassword("123456");
		
		JdbcTemplate jt=new JdbcTemplate(ds);
		
		String sql="select count(*) from user";
		
		//第一个参数是sql语句,第二个参数是
		int count=jt.queryForObject(sql, Integer.class);
		System.out.println(count);
}

(2)查询返回一个对象

public void testObject() {
		DriverManagerDataSource ds=new DriverManagerDataSource();
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		ds.setUrl("jdbc:mysql://localhost:3306/draw_life");
		ds.setUsername("root");
		ds.setPassword("123456");
		
		JdbcTemplate jt=new JdbcTemplate(ds);
		
		String sql="select * from User where Name=?";
		User user=jt.queryForObject(sql, new MyRowMapper(), "tom");
		System.out.println(user);
	}
}
class MyRowMapper implements RowMapper{

	@Override
	public User mapRow(ResultSet rs, int num) throws SQLException {
		//得到返回的结果集
		String name=rs.getString("Name");
		String password=rs.getString("password");
		//把结果封装到User类中
		User user = new User();
		user.setName(name);
		user.setPassword(password);
		return user;
	}
}

(3)查询返回一个List集合

public void testList() {
		DriverManagerDataSource ds=new DriverManagerDataSource();
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		ds.setUrl("jdbc:mysql://localhost:3306/draw_life");
		ds.setUsername("root");
		ds.setPassword("123456");
		
		JdbcTemplate jt=new JdbcTemplate(ds);
		
		String sql="select * from user";
		
		//jt.query(sql, rowMapper, args)中第三个参数args可省略
		List list=jt.query(sql, new MyRowMapper());
		System.out.println(list);
	}
}
class MyRowMapper implements RowMapper{

	@Override
	public User mapRow(ResultSet rs, int num) throws SQLException {
		//得到返回的结果集
		String name=rs.getString("Name");
		String password=rs.getString("password");
		//把结果封装到User类中
		User user = new User();
		user.setName(name);
		user.setPassword(password);
		return user;
	}
}

第三、使用Spring配置连接池和DAO使用JDBCTempelete

(1)导入jar包

c3p0-0.92.1.jar   和   mchange-commons-java-0.2.3.4.jar

(2)创建Spring配置文件,配置连接池



    
    
    
    
    

三、比较全的约束


四、注解版的自动绑定

      第一、从自动绑定(autowire)到@Autowired

Spring学习笔记——第二天_第2张图片

          可以通过default-autowire来指定默认的自动绑定方式,也可以在每个bean上的autowire来指定每个bean的自动绑定方式。@Autowired是基于注解的依赖注入的核心注解,它可以标注于类定义的多个位置,例如:

            (1):属性(域):无论声明的访问限制符是private、protected还是public,只要标注了@Autowired,它们所需的依赖注入需求都能被满足。

           (2):构造方法定义:相当于在bean中构造方法“construct”绑定的方式,它根据构造方法的参数类型,来决定将什么样的依赖对象注入给当前对象。

           (3):方法定义:@Autowired不仅可以标注于传统的setter方法之上,而且还可以标注于任何名义的方法定义之上,只要该方法定义了需要被注入的参数。

          在类中定义好@Autowired标注后,只要在IOC容器的配置文件中追加AutowiredAnnotationBeanProcessor就可以让整个应用运作了,当然,前提是我们需要使用ApplicationContext类型的容器。如下图:

        Spring学习笔记——第二天_第3张图片

      第二、@Qualifier的使用

             @Autowired是按照类型进行匹配,如果当前@Autowired标注的依赖在容器中能找到两个或者多个同一类型的对象实例时,就不适用了。这时可以使用@Qualifier做进一步限定。@Qualifier是byName的自动绑定注解版,它也可以标注于属性(域)、构造方法或者方法定义。例如:

              Spring学习笔记——第二天_第4张图片

           Spring学习笔记——第二天_第5张图片

       第三、JSR250的@Resource、@PostConstruct以及@PreDestroy

  1. @Resource与@Autowired不同,它遵循的是byName自动绑定形式的行为准则,也就是说IOC容器将根据@Resource指定的名称,到容器中查找beanName与之对应的示例,然后将找到的对象实例注入给@Resource标注的对象。@Resource还可以在构造方法或者普通方法定义上进行标注。Spring学习笔记——第二天_第6张图片
  2. @PostConstruct和@PreDestroy不是服务于依赖注入的,它们主要用于标注对象生命周期管理相关方法,这与spring的InitializingBean和DisposableBean接口,以及配置项中的init-method和destroy-method起到类似的作用。与@Autowired一样,添加JSR250标注后,需要在IOC容器中添加BeanPostProcessor才能使应用运行起来。JSR250所需要的就是org.springframwork.context.annotation.CommonAnnotationBeanPostProcessor。配置如下:Spring学习笔记——第二天_第7张图片Spring学习笔记——第二天_第8张图片
  3. 不管是@Autowired该是@Resource都需要添加BeanPostProcessor到容器中,所以可以在基于XSD的配置文件中使用一个的配置解决以上所有的BeanPostProcessor配置。不但能把AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor注册到容器中,同时还会把persistenceAnnotationBeanPostProcessor和RequestAnnotationBeanPostProcessor一并进行注册,一举四得。Spring学习笔记——第二天_第9张图片

 

你可能感兴趣的:(框架,Spring学习笔记)