搜档网
当前位置:搜档网 › Spring超级详细的笔记

Spring超级详细的笔记

1. 三种注入方式
1.1 构造器注入:


...

有参数构造,第一个参数(index按照顺序来)是:xxx。调用该javabean的名称为:id里面的

1.2 Setter注入:


...

无参构造,set注入,按照参数名称来,

1.3 接口注入:

2. javaBean配置代码(xml)
2.1 头文件:

xmlns:xsi="https://www.sodocs.net/doc/4511960917.html,/2001/XMLSchema-instance" xmlns:p="https://www.sodocs.net/doc/4511960917.html,/schema/p"
xmlns:context="https://www.sodocs.net/doc/4511960917.html,/schema/context"
xsi:schemaLocation="https://www.sodocs.net/doc/4511960917.html,/schema/beans
https://www.sodocs.net/doc/4511960917.html,/schema/beans/spring-beans-4.0.xsd
https://www.sodocs.net/doc/4511960917.html,/schema/context
https://www.sodocs.net/doc/4511960917.html,/schema/context/spring-context-4.0.xsd">




2.2 装配代码


...


如果不配置ID,默认全限定名#{number}eg:role#0。用ref引用另一个javabean






2.3 装配集合(举例,包括:list、map、props、set、array)




value-list-1














value-prop-1
value-prop-2
value-prop-3





value-set-1






value-array-1
value-array-2
value-array-3




2.4 命名空间装配:

xmlns:c="https://www.sodocs.net/doc/4511960917.html,/schema/c" xmlns:p="https://www.sodocs.net/doc/4511960917.html,/schema/p"
xmlns:util="https://www.sodocs.net/doc/4511960917.html,/schema/util" xmlns:xsi="http

://https://www.sodocs.net/doc/4511960917.html,/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.sodocs.net/doc/4511960917.html,/schema/beans https://www.sodocs.net/doc/4511960917.html,/schema/beans/spring-beans.xsd
https://www.sodocs.net/doc/4511960917.html,/schema/util https://www.sodocs.net/doc/4511960917.html,/schema/util/spring-util.xsd">


c:_0="1" c:_1="role_name_1" c:_2="role_note_1" />


p:id="2" p:roleName="role_name_2" p:note="role_note_2" />

p:id="1" p:userName="role_name_1" p:note="user_note_1" />

p:id="2" p:userName="role_name_2" p:note="user_note_2" />
















p:id="1" p:list-ref="list" p:map-ref="map" p:set-ref="set" />


3. javaBean配置代码(注解)
3.1 组件扫描、自动装配发现bean
3.2 @Component装配Bean =====》用在类上,生成javabean

JavaBean中:
@Component("role") //不写,默认类名小写
public class Role{
@Value("1")
private Long id;
@Value("role_name_1")
private String name;
...
}

javaConfig中:
package 必须同javaBean

3.3 @ComponentScan //默认扫描当前包的路径,POJO包名一直才可以扫描
@ComponentScan(basePackagesClasses={xxx.class,xxx.class}) //配置项:basePackages、basePackageClasses;
@ComponentScan(basePackages={xxx.xxxx.xxx.xxx)
public class PojoConfig{
}

AnnotationConfigApplicationContext生成IOC容器:
public static void main(String[] arg){
ApplicationContext context=new AnnotationConfigApplicationContext(PojoConfig.class);
Role role=context.getBean(Role.class);
}

3.3 (终于)补充xml和直接的混合使用!@ImportResource引入xml;
@ImportResource({"classpath=spring_config.xml"})

@Import;一个配置文件中引用其他配置文件
@Import({config2.class,config3.class})
public class config{
}

xml应用其他配置文件



==>然后就可以用@Autowired注入

3.4 @Autowired自动装配(可以用于方法,可以以用户参数) ====》用在属性上,注入之前生成的javabean
可以配置属性或者方法上,或者参数中!
3.3.1 举例:
接口:
public interface RoleService2{
public void printRoleInfo();
}

实现类:
@component


public class RoleServiceImpl2 implements RoleService2{

@Autowired //需要按照类型(接口就是实现类,抽象类就是实例类)注入,必须注入否则抛出异常,可以使用(required=false)取消必须注入
private Role role=null;

private RoleServiceImpl2(@Autowired Role role){
this Role=role;
}
@Override
public void printRoleInfo(){
...
};


}

配置方法上:
@Autowired
public void setRole(Role role){
This.role=role;
}

配置到参数中(构造方法)
public RoleController(@Autowired RoleService roleService){
}

3.3.2 消除歧义@(Qualifier)按照名称注入
@Autowired
@Qualifier(javaBean名称) =====》一个接口多个实现类,就需要用Qualifier表示到底注入哪个实现类
private RoleService roleSerive=null;

3.4 @Bean装配方法,获取的是放回对象作为Spring的Bean ====>第三方无法加@Component的javabean对象
//返回对象DataSource无法用@Component使之成为javabean给其他类调用,用如下方法,返回该对象
//initMethod初始化方法,destroyMethod销毁方法
@Bean(name="dataSource",initMethod="init",destroyMethod="myDestroy")
public DataSource getDateSource(){
....
return dataSource;
}

PS:第三方的可以用XML的方式更加简单

4. 其他细节
4.1 如果Spring配置了component scan,并且要注入的接口只有一个实现的话,那么spring框架
可以自动将interface于实现组装起来。如果没有配置component scan,那么你必须在application-config.xml(
或等同的配置文件)定义这个bean。
eg:
public interface RoleService{ //接口
}

@Component("roleServiceImp') //实现类
public class RoleServiceImp implements RoleService{
}

@ComponentScan(basePackagesClasses={RoleService.class,RoleServiceImp.class})
public class PojoConfig{
}

其他类:
...
@Autowired //自动注入实现类
RoleService roleService=null;

4.2 xml中新增扫描包的代码:



5. Spring EL

6. Spring面向切面编程:AOP


7. (重要!)Spring+mybatis
6.0 jar包

6.1 mysql配置文件:jdbc.properties

代码如下:
database.driver=com.mysql.jdbc.Driver
datebase.url=jdbc:mysql://localhost:3306/zte_ad
https://www.sodocs.net/doc/4511960917.html,ername=root
database.password=qqq123

6.2 Mybatis配置文件——sqlMypConfig.xml,载入jdbc.properties

代码如下:

PUBLIC "-//https://www.sodocs.net/doc/4511960917.html,//DTD Config 3.0//EN"
"https://www.sodocs.net/doc/4511960917.html,/dtd/mybatis-3-config.dtd">




启用或禁用缓存 -->


























6.3 (DAO)Mapper.xml和Mapper.java,并配置到配置文件中,加入注解 @Repository,加在接口上!

代码如下:
@Repository
public interface RoleMapper {

public int insertRole(Role role);

public Role getRole(@Param("id")Long id);

public int deleteRole(@Param("id") Long id);

public int updateRole(Role role);
}


PUBLIC "-//https://www.sodocs.net/doc/4511960917.html,//DTD Mapper 3.0//EN"
"https://www.sodocs.net/doc/4511960917.html,/dtd/mybatis-3-mapper.dtd">

xml如下:




insert into t_role(role_name,note) values (#{roleName},#{note})



delete from t_role where id=#{id};





update t_role set role_name=#{roleName},note =#{note} where id=#{id}



6.4 Spring的

配置文件 Spring_config.xml
xmlns:c="https://www.sodocs.net/doc/4511960917.html,/schema/c" xmlns:p="https://www.sodocs.net/doc/4511960917.html,/schema/p"
xmlns:util="https://www.sodocs.net/doc/4511960917.html,/schema/util" xmlns:xsi="https://www.sodocs.net/doc/4511960917.html,/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.sodocs.net/doc/4511960917.html,/schema/beans https://www.sodocs.net/doc/4511960917.html,/schema/beans/spring-beans.xsd
">

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">


classpath:jdbc.properties




























6.5 测试代码:
ApplicationContext ctx=new ClassPathXmlApplicationContext("Spring_config.xml");
RoleMapper roleMapper=ctx.getBean(RoleMapper.class);
Role role=new Role();
role.setRoleName("tom");
role.setNote("tom_note");
roleMapper.insertRole(role);
Long id=role.getId();
roleMapper.getRole(id);
role.setNote("jack");
roleMapper.updateRole(role);
roleMapper.deleteRole(id);

6.6 总结:
Spring中,通过加载SqlSessionFactoryBean从而加载mybatis的配置文件,同时和数据库四个字段;
mybatis的接口通过@Repository注入,通过MapperScannerConfigurer告知扫描哪个包。



8. Spring配置文件引入:web.xml中配置:
Spring_config.xml



contextConfigLocation
classpath:Spring_config.xml




contextConfigLocation
WEB-INF/Spring_config.xml



9. Spring和数据库编程
9.1 Spring用DPCP连接数据库:
xmlns:c="http://www.springframework.o

rg/schema/c" xmlns:p="https://www.sodocs.net/doc/4511960917.html,/schema/p"
xmlns:util="https://www.sodocs.net/doc/4511960917.html,/schema/util" xmlns:xsi="https://www.sodocs.net/doc/4511960917.html,/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.sodocs.net/doc/4511960917.html,/schema/beans https://www.sodocs.net/doc/4511960917.html,/schema/beans/spring-beans.xsd
">


class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">


classpath:jdbc.properties



















10. 事务
10.1 隔离级别:脏读,读/写提交,可重复读,序列号
10.2 开启扫描,开启事务配置如下:

xmlns:xsi="https://www.sodocs.net/doc/4511960917.html,/2001/XMLSchema-instance" xmlns:p="https://www.sodocs.net/doc/4511960917.html,/schema/p"
xmlns:aop="https://www.sodocs.net/doc/4511960917.html,/schema/aop" xmlns:tx="https://www.sodocs.net/doc/4511960917.html,/schema/tx"
xmlns:context="https://www.sodocs.net/doc/4511960917.html,/schema/context"
xsi:schemaLocation="https://www.sodocs.net/doc/4511960917.html,/schema/beans
https://www.sodocs.net/doc/4511960917.html,/schema/beans/spring-beans-4.0.xsd
https://www.sodocs.net/doc/4511960917.html,/schema/aop
https://www.sodocs.net/doc/4511960917.html,/schema/aop/spring-aop-4.0.xsd
https://www.sodocs.net/doc/4511960917.html,/schema/tx
https://www.sodocs.net/doc/4511960917.html,/schema/tx/spring-tx-4.0.xsd
https://www.sodocs.net/doc/4511960917.html,/schema/context
https://www.sodocs.net/doc/4511960917.html,/schema/context/spring-context-4.0.xsd">





class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">


classpath:jdbc.properties












据源事务 -->
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">






















10.3 注解@Transactional
10.4 在一个事务方法中,用try...catch...如果有异常一定要throw new RuntimeException(ex);抛给spring处理















































































相关主题