Spring语法2
IOC理解
(1)IOC就是控制反转,是指创建对象的控制权的转移,以前创建对象的主动权和时机是由自己把控的,
而现在这种权力转移到Spring容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系,
对象与对象之间松散耦合,也利于功能的复用。DI依赖注入,和控制反转是同一个概念的不同角度的描述,
即应用程序在运行时依赖IoC容器来动态注入对象需要的外部资源。
(2)最直观的表达就是,IOC让对象的创建不用去new了,可以由spring自动生产,使用java的反射机制,
根据配置文件在运行时动态的去创建对象以及管理对象,并调用对象的方法的。
(3)Spring的IOC有三种注入方式 :构造器注入、setter方法注入、根据注解注入。IoC让相互协作的组件保持松散的耦合,而AOP编程允许你把遍布于应用各层的功能分离出来形成可重用的功能组件
注入数据
@Value
含义:注入基本数据
语法:@Value("数据内容")
@Value("${动态获取}")
注意:配合下面标签使用
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
@Autowired
语法:@Autowired(required = "true-默认、false、是否必须进行装配")
修饰:成员变量
含义:默认按照类型自动装配,如果有则直接装配,若有多个则按照名称装配
注意:
1.若容器中有一个类型可以与之匹配则装配成功,若没有一个类型可以匹配则报错
NoSuchBeanDefinitionException
2.若容器中有多个类型可以与之匹配,则自动切换为按照名称装配,若名称没有对应,则报错
NoUniqueBeanDefinitionException
3.其他注解
@Primary
含义:首选项,当类型冲突的情况下,此注解修饰的类被列为首选(备胎扶正)
修饰:类
注意:不能单独使用,必须与@Component....联合使用
@Qualifier(value="名称")
含义:按照名称装配
修饰:成员变量
注意:不能单独使用,必须与@Autowired联合使用
@Configuration
@ComponentScan(basePackages = {"com.apesource"})
//@PropertySource(value = "classpath:jdbc.properties")
//@Import(value = DataSourceConfig.class)
public class ApplicationConfig {//方式1
// @Bean
// public IUserDao userDao(){
// return new UserDaoImp();
// }
//
// @Bean
// public IUserService userService(){
// return new UserServiceImp(userDao());
// }
//
// @Bean
// public IUserController userController(){
// return new UserControllerImp(userService());
// }//方式2@Beanpublic IUserDao userDao(){return new UserDaoImp();}@Beanpublic IUserService userService(IUserDao userDao){return new UserServiceImp(/*Autowried*/userDao);}@Beanpublic IUserController userController(IUserService userService){return new UserControllerImp(/*Autowried*/userService);}
}
@Resource(name="名称")
含义:按照名称装配
修饰:成员变量
注意:单独使用
@Scope
含义:配置类的作用域
修饰:类
注意:不能单独使用,必须与@Component....联合使用
@Scope("prototype")
@Scope("singleton")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
@PostConstruct:初始化,修饰方法,替换:init-method
@PreDestroy:销毁,修饰方法,替换:destroy-method(必须与@Compnent配合使用)
@Component
public class Teacher {private String tname;private int tage;@PostConstructpublic void doinit(){System.out.println("初始化注解");}@PreDestroypublic void dodestory(){System.out.println("销毁注解");}
}
此类充当配置类,替代applicationContext.xml文件
* spring中的新注解
* @Configuration
* 作用:指定当前类是一个配置类
* 细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。
* @ComponentScan
* 作用:用于通过注解指定spring在创建容器时要扫描的包
* 替换:<context:component-scan base-package="com.apesource"></context:component-scan>
* @PropertySource
* 作用:用于指定properties文件的位置
* 替换: <context:property-placeholder location="classpath:message.properties"></context:property-placeholder>
* @Bean
* 作用:用于把当前方法的返回值作为bean对象存入spring的容器中
* 属性:
* name:用于指定bean的id。当不写时,默认值是当前方法的名称
* @Import
* 作用:用于导入其他的配置类
* 属性:
* value:用于指定其他配置类的字节码。
* 例子:@Import(SystemSpringConfig.class)
什么是DBUtils?
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils核心关键字:QueryRunner中提供对sql语句操作的API.
<!--注入c3p0数据源--><bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="comboPooledDataSource"><property name="driverClass" value="${msg1}"></property><property name="jdbcUrl" value="${msg2}"></property><property name="user" value="${msg3}"></property><property name="password" value="${msg4}"></property></bean><!--注入QueryRunner--><bean class="org.apache.commons.dbutils.QueryRunner" id="queryRunner"><constructor-arg name="ds" ref="comboPooledDataSource"></constructor-arg></bean>