Spring Framework
Использования контекста из кода:
- Из classpath.
ApplicationContext context = new ClassPathXmlApplicationContext("/application-context.xml"); Bean bean = (Bean)context.getBean("bean");
- С файловой системы
ApplicationContext context = new FileSystemXmlApplicationContext("C:/Beans.xml"); Bean bean = (Bean)context.getBean("bean");
IoC (DI)
IoC - Инверсия управления (Inversion of Control)
DI - Внедрение зависимости (Dependency injection)
RMI
<bean class="org.springframework.remoting.rmi.RmiServiceExporter"> <property name="serviceName" value="название"/> <property name="service" ref="ссылка на бин"/> <property name="serviceInterface" value="интерфейс (указывать полностью с пакетом)"/> <property name="registryPort" value="1099"/> </bean>
или
RmiServiceExporter server = new RmiServiceExporter(); server.setServiceName("RmiMessage"); server.setService(rmiMessage); server.setServiceInterface(RmiMessage.class); server.setRegistryPort(1099); server.afterPropertiesSet();
Клиент:
<bean id="бин" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl" value="rmi://HOST:PORT/название"/> <property name="serviceInterface" value="интерфейс"/> </bean>
или
RmiProxyFactoryBean factoryBean = new RmiProxyFactoryBean(); factoryBean.setServiceUrl("rmi://localhost:1099/RmiMessage"); factoryBean.setServiceInterface(RmiMessage.class); factoryBean.afterPropertiesSet(); RmiMessage rmiMessage = (RmiMessage)factoryBean.getObject(); System.out.println(rmiMessage.getMessage());
В случае если сервер не может правельно зарегестрировать ип адрес то нужно запустить с параметром:
-Djava.rmi.server.hostname=ip
JDBC
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mkyongjava" /> <property name="username" value="root" /> <property name="password" value="password" /> </bean>
private NamedParameterJdbcTemplate namedTemplate; public void setDataSource(javax.sql.DataSource dataSource) { this.namedTemplate = new NamedParameterJdbcTemplate(dataSource); } public List<HelloWorldBean> getName(){ String sql = "SELECT * FROM TEST ORDER BY ID"; Map<String, Object> param = new HashMap<>(); param.put("id1", 1); param.put("id2", 2); return namedTemplate.query(sql,param, rowMapper); } private RowMapper<HelloWorldBean> rowMapper = new RowMapper<HelloWorldBean>() { @Override public HelloWorldBean mapRow(ResultSet rs, int rowNum) throws SQLException { HelloWorldBean bean = new HelloWorldBean(); bean.setId(rs.getInt("id")); bean.setName(rs.getString("name")); return bean; } }; public void saveItem(ItemDto item){ String query = "INSERT INTO ITEMS (ITEM_ID, ITEM_NAME, ITEM_PRICE, DATE_QUERY) VALUES (:itemId,:itemName,:itemPrice,:dateQuery)"; Map<String, Object> namedParameters = new HashMap<>(); namedParameters.put("itemId", item.getId()); namedParameters.put("itemName", item.getName()); namedParameters.put("itemPrice", item.getPrice()); namedParameters.put("dateQuery", new Date()); namedTemplate.update(query, namedParameters); }
Шаблон context.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> </beans>
Подключение нескольких контекстов в один:
<import resource="database/Spring-Datasource.xml" />
Maven
Контекст
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.4.RELEASE</version> </dependency>
JDBC
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.4.RELEASE</version> </dependency>
Аннотации
@Autowired - автозаполнение бина из контекста