Spring笔记IOC AOP JDBC Template

学习Spring的相关笔记,还没完全学完,感觉上要点就这么多吧,主要就是配置。

IOC:

ApplicationContext (IOC容器的接口) ClassPathXmlApplicationContext

ApplicationContext ioc=new ClassPathXmlApplicationContext("ioc.xml");

同一个组件在IOC中是单实例的

p名称空间:XML配置文件下面namespace 勾选

p:age="14"直接写到bean标签里

复杂赋值,都在标签体中

<bean id="person01" class="com.zhous.www.Person">  
	<property>
    	<!--进行复杂赋值,不能value="null" --> 
        <null/>
    </property>
</bean>
------------------
<bean id="person01" class="com.zhous.www.Person">  
	<property name="car" ref="car01"></property> <!--引用其他bean--> 
</bean>
--------------------
<bean id="person01" class="com.zhous.www.Person">  
	<bean id="car01" class="com.zhous.www.Car">  
		<property name="car11"></property>   <!--相当于重新new了一个Car--> 
	</bean>
</bean>
----------------------
<bean id="person01" class="com.zhous.www.Person">  
	<property>
    	<list> <!--List的使用 list标签--> 
       		<bean id="car01inner" class="com.zhous.www.Car">   <!--内部new了一个对象--> 
				<property name="car11"></property>  
			</bean>
            <ref bean="car02"/>  <!--引用外部bean--> 
        </list>
    </property>
 </bean>
----------------------
<bean id="person01" class="com.zhous.www.Person">  
	<property name="car11"></property> <!--相当于重新new了一个Car--> 
    <property name="maps">
        <map>
        	<entry key="key01" value="abc"></entry>
            <entry key="key02" value="asdf"></entry>
        </map>
    </property>
</bean>
=======================
<beans 。。。>  
    <bean id="person01" class="com.zhous.www.Person"></bean>
    <util:map id="map01">           <!--可引用的map--> 
    	<entry key="key01" value="abc"></entry> <!--填元素就行--> 
        <entry key="key02" value="asdf"></entry>
    </util:map>
</beans>

上面内部beanid="car01inner"是不能获取到的;

properties类型,value直接写在标签体中

级联属性可以修改属性的属性 ,如下

<property name="car11.price" value="232434"></property>

配置信息继承,只是信息:

<bean id="person01" class="com.zhous.www.Person" parent="person02">
     <property name="car11" value="abc"></property> <!--变化的写出来--> 
</bean>

bean按照从上到下创建,但可以通过depends-on属性来决定先后

bean scope作用范围属性,=“prototype” 即为多实例(默认单实例,启动创建),引用一次创建一次,启动时不创建。 /数据库连接池最适合单适例!!!!

工厂创建对象:

​ 静态工厂:

<bean id="001" class="xx.xx.xx.XXstaticFactory" factory-method="getAirplane">
    <constructor-arg name="jzname" value="xxx"></constructor-args> <!--传递参数--> 
</bean>

​ 实例工厂:

<bean id="airplanefactory1" class="xx.xx.xx.AirplaneFactory"</bean><!--先实例工厂--> 

<bean id="airplan1" class="xx.xx.xx.Airplane" factory-bean="airplanefactory1"><!--指定工厂--> 
    <constructor-arg name="jzname" value="xxx"></constructor-args> <!--传递参数--> 
</bean>

1。编写一个factorybook的实现类,继承FactoryBean,后面范型是要创建的类型。

2。FactoryBean接口实现3个方法,分别是“产生对象”、“什么类型”、“是否为单例”。

IOC关闭时单例会销毁,多例不会

后置处理器

实现后置处理器接口BeanPostProccessor,在各个BEAN初始化(无论有无自带的init初始化方法)前后执行

数据库连接池bean单例:(导入C3P0 jar包)

class=“XXX.ComboPooledDataSource” ,属性可提示。

程序中写DataSource bean=ioc.getBean(DataSource.class)

bean.getConnection();这是拿一个连接

spEL:

​ Spring表达式 #{}

<bean id="abc" class="XXXX.Car">
  <property name="name" value="#{book1.name}"></property>
     <property name="salary" value="#{234*32}"></property>
     <property name="name" value="#{car}"></property> <!--此处相当于引用-->
     <property name="ddd" value="#{T(静态全类名).(1,1)方法名可传参}"></property><!--引用静态方法,不用静态用对象的话T去掉-->
</bean>
spring中类加注解,快速加入IOC容器管理中

1步:四种注解:

@Controller 控制器,给sevlet加

@Repository 数据库,dao持久层

@Service 业务逻辑 BookServie

@Component 其他

以上再加@Scope(value=“proptype”)改为多实例

2步:namespace->context

<context:component-scan base-package></context:component-scan>
<!--扫基础包下所有的类,扫进来后bean的id默认为类名首字母小写,要改的话在注解后加括号改-->

3.一定要导入aop包支持注解模式

@Autowired自动装配 ,

写在类属性前 要有前面4种注解才用这个注解,也就是要在容器中;后面加(required=false)找不到拉倒

写在其他位置也可,都会自动给各属性赋值

@Qualifier(“xx”) ,指定变量名装配,也可以写在参数上:(可写在属性上,方法上,参数上)

@Qualifier("bookservice") BookService bookservice

都是注解:

@Autowired spring的;

@Resource javaee的,扩展性强

@Inject EJB的,不用

泛型:

Spring中可以用带泛型的父类确定子类的类型

AOP

1。导包

2。写切面类,里面静态方法

==========这以下都是基于注释的AOP=

3。在切面类前加@Aspect ,将类写进配置文件中(类加@Component);

4。在切面类的静态方法前加

@Before(execution(public int 包.切入类.方法名(int,int))) 以下同,其中星号代表所有方法,也可以写具体方法

@After

@AfterReturning

@Around

5。配置文件中namespace命名空间的aop打开,配置文件中加入

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

6。配对了话方法上有红色小箭头

7。使用Bean时,要用接口类,不要用原类,这样才能起作用。接口不加在容器中。

8。通配符:

Math*.*   //表示以Math开头的类的所有方法
Math*.cal(int,*) //表示任参数,重载
    Math*.cal(..)  //匹配任意参数个数及类型

9。静态方法后加(JoinPoint joinpoint)参数,即可调用:

Object[] args=joinpoint.getArgs[];
System.out.println(Array.alist(args));     //打印参数

Signature signature=joinpoint.getSignature();
String name=signature.getName();  //获取方法名

10。切入点表达式抽取:

@Pointcut("execution(public int 包.切入类.方法名(int,int))") //在注释中写上Pointcut
public void abc(){}  //空建一个方法 
//后面注释中就可以引用abc(),如@Before(value="abc()"") 

@Around 环绕通知,全了,相当于各个标签都包含在内了

JDBD Template

配置中数据连接相关:

1。context:component-scan 全扫

2。context:property-placeholder location: … 存property文件

3。bean一个数据源

使用Bean连接数据库后,

String sql="UPDATE employee SET salary=? WHERE emp_id=? "; 
int update=jdbcTemplate.update(sql,1300.00,5);  //两个问号  成功返1

//具名参数,即把问号换成参数 ?   :emp
String sql="UPDATE employee SET salary=:sal WHERE emp_id=:emp "; 
//前提是配一个有具名参数的bean   NamedParameterJdbcTemplate ,配置时加入构造参数,指定数据源
Map<String,Object> paraMap=new HashMap<>();
paraMap.put("sal","1000"); //第一个为key,键值为参数名,第二个为值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值