spring核心大总结

ioc创建对象与属性注入

配置文件方式
  • 创建对象
<bean id="user" class="cn.itcast.ioc.User" scope="prototype"></bean>
  • 注入属性
<!-- 使用有参数构造来注入属性 -->
    <bean id="demo1" class="cn.itcast.property.PropertyDemo1">
        <!-- 注入属性值 -->
        <constructor-arg name="username" value="小马"/>
    </bean>

    <!-- 使用set方法注入属性 -->
    <bean id="book" class="cn.itcast.property.Book">
        <!-- 注入属性值 -->
        <property name="bookName" value="红楼梦"/>
    </bean>

    <!-- 注入对象类型的属性 -->
    <!-- 配置service和dao对象 -->
    <bean id="userDao" class="cn.itcast.ioc.UserDao"></bean>
    <bean id="userService" class="cn.itcast.ioc.UserService">
        <!-- 注入dao对象
                name属性值:service类里面属性名称
                现在不要写value属性,因为刚才是字符串,现在是对象
                ref属性:dao配置bean标签中id值
         -->
        <property name="userDao" ref="userDao"/>
    </bean>

    <!-- p名称空间注入 -->
    <bean id="person" class="cn.itcast.property.Person" p:pname="lucy"></bean>

    <!-- 注入复杂类型数据 -->
    <bean id="complex" class="cn.itcast.property.Complex">
        <!-- 数组 -->
        <property name="args">
            <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="11"></entry>
                <entry key="BB" value="22"></entry>
                <entry key="CC" value="33"></entry>
            </map>
        </property>

        <!-- properties -->
        <property name="properties">
            <props>
                <prop key="driverClass">com.mysql.jdbc.driver</prop>
                <prop key="username">tom</prop>
            </props>
        </property>
    </bean>

注解方式

  • 创建对象
 <!-- 开启注解扫:描到包里扫描类、方法、属性上面是否有注释-->
<context:component-scan base-package="cn.itcast.anno"></context:component-scan>

<!-- 只扫描属性上面的注解 -->
<context:annotation-config></context:annotation-config>

@Component(value = "user") 
@Scope(value = "prototype") //多实例,视情况而定
public class User {
    public void add(){
        System.out.println("add...");
    }
}

属性注入

<!-- 开启注解扫:描到包里扫描类、方法、属性上面是否有注释-->
<context:component-scan base-package="cn.itcast.anno"></context:component-scan>

<!-- 只扫描属性上面的注解 -->
<context:annotation-config></context:annotation-config>

 @Resource(name = "bookDao")
    private BookDao bookDao;

 @Resource(name = "ordersDao")
    private OrdersDao ordersDao;
  • 创建对象四个注解
@Component    //通用
@Controller   //web层中使用
@Service   //业务层
@Repository //持久层
  • 创建属性的两个注解
    @Autowired 注解进行自动装配,不需要指定要注入的对象的value值。 @Resource(name=”userDao”),指定需要创建的对象的名字,这里name对应 @Component注解中的value的值,使用这个注解能够根据我们所指定的对象名准确创建出我们所需要的对象

aop

  • joinpoint:节点
  • pointcut:切入点
  • advice:通知/增强
  • aspect:切面
    aop

aspect以配置文件方式完成

<!-- 1.配置对象 -->
    <bean id="book" class="cn.itcast.aop.Book"></bean>
    <bean id="myBook" class="cn.itcast.aop.MyBook"></bean>

    <!-- 2.配置aop操作 -->
    <aop:config>
        <!-- 2.1配置切入点 -->
        <aop:pointcut id="pointcut1" expression="execution(* cn.itcast.aop.Book.*(..))"/>

        <!-- 2.2配置切面;把增强用到方法上面 -->
        <aop:aspect ref="myBook">
            <!-- 配置增强类型;
             method:增强类里面使用哪个方法作为前置-->
            <aop:before method="before1" pointcut-ref="pointcut1"/><!-- 前置增强 -->
            <aop:after-returning method="after1" pointcut-ref="pointcut1"/><!-- 后置增强 -->
            <aop:around method="around1" pointcut-ref="pointcut1"/><!-- 环绕增强 -->
        </aop:aspect>
    </aop:config>
    
/* 前置通知 */
    public void before1(){
        System.out.println("前置增强....");
    }

    /* 后置通知 */
    public void after1(){
        System.out.println("后置增强...");
    }

    /* 环绕通知 */
    public void around1(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        //方法之前
        System.out.println("方法之前...");

        //执行被增强的方法
        proceedingJoinPoint.proceed();


        //方法之后
        System.out.println("方法之后...");
    }

aspectj以注解方式完成

    <!-- 开启aop操作 -->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

    <!-- 配置对象 -->
    <bean id="book" class="cn.itcast.aop.Book"></bean>
    <bean id="myBook" class="cn.itcast.aop.MyBook"></bean>

	@Aspect
public class MyBook {

    //在方法上面使用注解来完成增强配置
    @Before(value = "execution(* cn.itcast.aop.Book.*(..))")
    public void before1(){
        System.out.println("before...");
    }
}
--------------------- 
原文:https://blog.csdn.net/qq_39734087/article/details/97954322 

aspectj注解总汇

  • @Before 前置通知
  • @AfterReturning后置通知
  • @Around环绕通知
  • @AfterThrowing抛出通知
  • @After最终通知不管是否异常该通知都会执行
    aop操作使用注解完成增强或者面向切面更简单一些

jdbcTemplate的crud操作

原文连接:https://blog.csdn.net/qq_39734087/article/details/97957574

c3p0的使用

原文连接:https://blog.csdn.net/qq_39734087/article/details/97960630

事物管理

原文连接:https://blog.csdn.net/qq_39734087/article/details/97962605

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值