spring框架半注解,全注解笔记(整合c3p0连接池)

spring的IOC注解

             注解的开发步骤:
                 1 导包  spring-aop.jar
                 2 开启注解扫描器  告诉spring应该去那个包下面解析注解
                 3 配置注解组件  Component
                 4 测试
             掌握的注解
                注解条件:(掌握)
                    1 导包 spring-aop.jar
                    2 配置注解扫描器
                        <context:component-scan base-package="com.it"></context:component-scan>
                @Component("bean的id值") 定义在类上 只要定义在了类上 
                             那么注解扫描器只要一扫描到就会创建该类的实例对象 放在spring容器中
                spring发布了公告, @Component这个注解不维护了,要维护这个注解下面衍生出的3个注解
                    @Controller("bean的id值") 针对的就是web层  
                    @Service("bean的id值")    针对的是service层
                    @Repository("bean的id值") 针对的是dao层
           
                    @Value("属性值") 定义在属性字段上 针对的是基本类型和String类型
                             如果使用了这个注解 该属性的set方法可以省略不写


                @Autowired     定义在属性字段上的 针对的是对象类型
                        如果定义在了那个对象类型的属性身上 会自动去spring容器中找该类型的实例对象给赋值
                    
                @Qualifier("userDaoxxx")定义在属性字段上的 指定用该类型的哪个id名称的实例对象
                注意: @Qualifier要想使用 必须结合 @Autowired 一起使用
                           
                @Resource(name="userDaoxxx")
                @Autowired+@Qualifier("userDaoxxx")   

         了解的注解:
                @Scope("singleton"或则prototype)  定义在类上的 指定当前类是单实例还是多实例

                @PostConstruct  定义在方法上  配置初始化方法
                @PreDestroy     定义在方法上 配置销毁的方法

 

jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/atm?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
jdbc.username=root
jdbc.password=123


#jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:oracle://localhost:3306/hibernate
#jdbc.username=root
#jdbc.password=1234


#jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:db2://localhost:3306/hibernate
#jdbc.username=root
#jdbc.password=1234

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: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" > 
	<!-- 让spring知道外部的数据库连接信息的配置文件 jdbc.properties
	让spring能够加载jdbc.properties文件
		 spring提供了一个标签 可以加载外部的properties文件内容
		 导context的名称空间和约束 才会有提示 -->
	
	
	 <context:property-placeholder location="classpath:jdbc.properties"/> 
	

	<!-- C3P0 -->
	 <bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driver}"></property>
		<property name="jdbcUrl" value="${jdbc.url}"></property>
		<property name="user" value="${jdbc.username}"></property>
		<property name="password" value="${jdbc.password}"></property>
		
	</bean> 
	
	 配置注解扫描器
	<context:component-scan base-package="com.it"></context:component-scan>  
</beans> 

service层

package com.it.serviceImpl;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Service;

import com.it.dao.UserDao;
import com.it.service.UserService;
//@Component("bean的id值") 定义在类上 只要定义在了类上 
//那么注解扫描器只要一扫描到就会创建该类的实例对象 放在spring容器中
//spring发布了公告, @Component这个注解不维护了,要维护这个注解下面衍生出的3个注解
//@Controller("bean的id值") 针对的就是web层  
//@Service("bean的id值")    针对的是service层
//@Repository("bean的id值") 针对的是dao层
//@Scope("singleton"或则prototype)  定义在类上的 指定当前类是单实例还是多实例
@Scope("singleton")
@Service("userservice")
public class UserServiceImpl implements UserService {
//	@Value("属性值") 定义在属性字段上 针对的是基本类型和String类型
//    如果使用了这个注解 该属性的set方法可以省略不写
	@Value("要开始访问dao了")
	private String name;
//	@Autowired     定义在属性字段上的 针对的是对象类型
//	如果定义在了那个对象类型的属性身上 会自动去spring容器中找该类型的实例对象给赋值
//	@Qualifier("userDaoxxx")定义在属性字段上的 指定用该类型的哪个id名称的实例对象
//	注意: @Qualifier要想使用 必须结合 @Autowired 一起使用
	@Autowired
	@Qualifier("userdao")
	private UserDao userDao;
	
	@Override
	public void find() {
		ApplicationContext context=	new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao ud = (UserDao) context.getBean("userdao");
		System.out.println(name);
		ud.find();
		
	}
	
		// 初始化方法
		@PostConstruct
		public void init()
		{
			System.out.println("userService的初始化方法....");
		}
		
		// 销毁的方法
		@PreDestroy
		public void destory()
		{
			System.out.println("userService的销毁方法....");
		}
			
}

dao层

package com.it.daoImpl;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;

import com.it.dao.UserDao;
@Repository("userdao")
public class UserDaoImpl implements UserDao {
	@Value("开始访问数据库")
	private String daoName;


	//	@Override
	public void find() {

		System.out.println(daoName);
		
		
	}
	
	 
}

测试类

package com.it.test;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;



public class SpringConfigTest 
{
	public static void main(String[] args) throws SQLException {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService bean = (UserService) context.getBean("userservice");
		bean.find();
	   DataSource ds =(DataSource)context.getBean("c3p0");
	   Connection con = ds.getConnection();
	   System.out.println(con);
}
	
	
}

spring全注解: 
          完全用注解的方式 完全抛弃掉xml配置文件
          半注解半xml方式:
                别人的类用xml
                自己的类用注解

          全注解方式:
                别人类要用注解
                自己的类也要用注解

    
    条件: 
        需要有一个注解类,不在加载配置文件 而是加载这个注解类

注解类

package com.it.springConfig;

import java.beans.PropertyVetoException;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;

import com.mchange.v2.c3p0.ComboPooledDataSource;

@Configuration // 表示该类是一个注解类
@ComponentScan(basePackages="com.it")  //<context:component-scan base-package="com.it"></context:component-scan>
@PropertySource(value="classpath:jdbc.properties")//<context:property-placeholder location="classpath:jdbc.properties"/>
//@Import(value = {DataSourceconfig.class})
public class SpringConfig
{
	@Value("${jdbc.driver}")
	private String driver;
	@Value("${jdbc.url}")
	private String url;
	@Value("${jdbc.username}")
	private String username;
	@Value("${jdbc.password}")
	private String password;
	
	// 自己创建c3p0连接池 给spring容器
	@Bean(name="c3p0")  //<bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	public DataSource createDataSourceC3p0() throws Exception
	{
		ComboPooledDataSource ds = new ComboPooledDataSource();
		ds.setDriverClass(driver);
		ds.setJdbcUrl(url);
		ds.setUser(username);
		ds.setPassword(password);
		return ds;
	}
	
	// 4.3以前 要给spring配置一个解析器 来解析 ${}
	@Bean
	public static PropertySourcesPlaceholderConfigurer createPropertySourcesPlaceholderConfigurer()
	{
		return new PropertySourcesPlaceholderConfigurer();
	}
}

测试类(service,dao和上面一样不需改变)

注意:如果不需要applicationContext.xml文件,那所有获得bean的方法由获取xml文件:

ApplicationContext context=    new ClassPathXmlApplicationContext("applicationContext.xml");

改为获取注解类:

ApplicationContext context=new AnnotationConfigApplicationContext(SpringConfig.class);

package com.it.test;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.it.dao.UserDao;
import com.it.service.UserService;

import com.it.springConfig.SpringConfig;


public class SpringConfigTest 
{
	public static void main(String[] args) throws SQLException {
	// 使用AnnotationConfigApplicationContext(注解类.class)
	   ApplicationContext context=new AnnotationConfigApplicationContext(SpringConfig.class);

		UserService bean = (UserService) context.getBean("userservice");
		bean.find();
	   DataSource ds =(DataSource)context.getBean("c3p0");
	   Connection con = ds.getConnection();
	   System.out.println(con);
}
	
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Exception.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值