Spring

IOC

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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	<context:component-scan base-package="包路径"/><!--用来扫描有注解的类,可以用注解代替-->
	
	<context:property-placeholder location="classpath:*.properties"/><!--外部属性文件,classpath:表示resources下文件,一定要加-->
	
	<bean id="id" class="类全名" [scope="singleton(单例)/prototype(多例)"] [init-method="初始化方法"] [destroymethod="摧毁方法"]>
		<!--构造方法注入-->
		<constructor-arg index="参数索引" value="value"/><!--通过参数索引-->
		<constructor-arg name="参数名" value="value"/><!--通过参数名-->

		<!--setter注入-->
		<property name="字段1" value="value"/><!--基本数据类型-->
		<property name="字段2"><!--集合-->
		 	<对应类型标签>
		 		<value>value</value>
		 	</对应类型标签>
		</property>
		<property name="字段3"><!--内部创建类-->
            <bean class="类全名">
                <property name="字段" value="value"/>
            </bean>
        </property>
        <property name="字段3" ref="其他bean" /><!--引用其他bean-->
	</bean>
</beans>

注解

@Controller(["id"]) 视图层/@Service 业务层/@Repository 持久层/@Configuration 配置类/@Component: 其他类
@Scope("singleton"(单例)/"prototype"(多例))

//配置类中注解
@ComponentScan("包路径")//代替xml包扫描
@PropertySource("*.properties")//代替xml外部属性文件
public class Bean {
	@Autowired(required = true/false)//根据数据类型注入容器中对象
	@Value("value")//注入基本数据类型数据
	private Object filed1;

    @PostConstruct//构造方法后
    public void postConstruct(){}
    
    @PreDestroy//销毁前
    public void preDestroy(){}
}

获取

//xml配置方式,配置有包扫描可以获取注解方式对象
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("*.xml");
//注解方式,获取不到xml配置方式对象
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(启动类.class);

//根据对象id获取
context..getBean("id");
//根据对象类型获取
context.getBean(类名.class);

AOP

配置切面

XML

<!--执行切面类方法-->
<aop:config>
	<aop:aspect ref="切面类">
		<aop:pointcut id="切入点" expression="切入点表达式"/><!--配置切入点-->
        <aop:通知生命周期 method="切面类方法" pointcut-ref="切入点"/>
    </aop:aspect>
</aop:config>

<!--添加事务-->
<!--事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>

<!--事务管理规则-->
<tx:advice id="事务名">
	<tx:attributes>
		<tx:method name="方法名(可以拼接*)" propagation="传播行为" read-only="查询操作设置为true"/>
	</tx:attributes>
</tx:advice>

<!--切入点-->
<aop:config>
	<aop:pointcut id="切入点" expression="切入点表达式"/><!--配置切入点-->
	<aop:advisor advice-ref="事务名" pointcut-ref="切入点表达式"/>
</aop:config>

注解

开启自动代理

<!--@Aspect支持-->
<aop:aspectj-autoproxy/>

<!--@Transactional支持-->
<tx:annotation-driven/>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
	<property name="dataSource" ref="dataSource"/> 
</bean>
@Component
@Aspect//标记为切面类
public class 切面类{
	//定义切入点,再引用切入点
	@Pointcut("切入点表达式")
  	  public void pointcut(){}

	@生命周期("pointcut()")
	public void funtion(){}

	//直接定义切入点
	@生命周期("切入点表达式")
	public void funtion(){}

	//事务
	@Transactional(
            readOnly = 查询操作设置为true,
            propagation = 传播行为,
            rollbackFor = {遇到指定异常.class回滚},
            noRollbackFor = {遇到指定异常.class不回滚}
    )
    public void funtion(){}
}

环绕方法

ProceedingJoinPoint为正在执行的切入点方法
proceedingJoinPoint.proceed()执行切入点方法

//使用注解时生命周期为@Around("")
public Object bean(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {

	Object[] args = proceedingJoinPoint.getArgs();//获取切入点参数
	Object object = proceedingJoinPoint.proceed(args);

	return object;
}

切入点表达式

..匹配0到多个包/匹配0到多个参数
*匹配所有返回类型/匹配当前目录下所有类/在bean表达式中拼接字符串(*Service)

指定方法
execution(返回类型 包..方法(参数类型))

指定类中所有方法
within(.)

指定对象
bean(对象)

生命周期

before 执行前
after-returning 返回前
after-throwing 异常
after 最终,出异常也会进
around 环绕,在方法里配置执行

传播行为

REQUIRED 已经有事务,加入事务中执行;否则则新建一个事务
SUPPORTS 已经有事务,加入事务中执行:否则以非事务方式执行

JdbcTeamplate

放入容器

<context:property-placeholder location="*.properties"/><!--外部属性文件-->
<!--数据源对象-->
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="${driver}"/>

	<!--username和password加上前缀,否则会获取到系统的用户名密码-->
	<property name="username" value="${jdbc.username}"/>
	<property name="password" value="${jdbc.password}"/>

	<property name="url" value="${url}"/>
</bean>

<!--jdbcTemplate-->
<bean class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" value="datasource"/>
</bean>

执行

sql语句用?占位,根据参数顺序赋值

查询
jdbcTemplate.query(String sql, new RowMapper<Object>() {
	@Override
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
    	每行数据进入一次方法
    	return 封装ResultSet中数据的Object;
    }
},Object... args);

//其他操作都使用update
jdbcTemplate.update(String sql,Object... args);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值