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:切面
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.youkuaiyun.com/qq_39734087/article/details/97954322
aspectj注解总汇
- @Before 前置通知
- @AfterReturning后置通知
- @Around环绕通知
- @AfterThrowing抛出通知
- @After最终通知不管是否异常该通知都会执行
aop操作使用注解完成增强或者面向切面更简单一些
jdbcTemplate的crud操作
原文连接:https://blog.youkuaiyun.com/qq_39734087/article/details/97957574
c3p0的使用
原文连接:https://blog.youkuaiyun.com/qq_39734087/article/details/97960630
事物管理
原文连接:https://blog.youkuaiyun.com/qq_39734087/article/details/97962605